質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

8286閲覧

f.write でファイルに出力されない

fhiro_tokio

総合スコア66

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/09/24 21:04

編集2020/09/24 23:37

以下、python を実行し、printは正常にできるのに、そのprintした内容がファイルに何も出力されません。

from bs4 import BeautifulSoup html=requests.get("https://xxxxxx.jp/").text soup=BeautifulSoup(html,"html.parser") f="altext.txt" f=open(file,"w") imgs=soup.find_all("img") for i in imgs: src=i["src"] alt=i.get("alt","alt無指定") src_alt=src+','+alt print(src_alt) f.write(src_alt) f.close

追加情報:
f="altext.txt" を file="altext.txt" に変更して実行したら、altext.txt ファイルは作成されていますが、0バイトになっています。print文の内容は正常に表示されています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toast-uz

2020/09/24 22:37

y_waiwai様の回答の通りで、f="altext.txt"の部分(なぜかfが全角・・・)が、file="altext.txt"の間違いと思うのですが、「printは正常にできる」というのが謎です。何か情報が足りていないのでは無いでしょうか?質問者様の追加情報を待ちます。
toast-uz

2020/09/24 23:08

私の方で再現を試みたところ、ファイルに無事出力されました。 「エラーはなくなりました」とありましたが、以前は「(1)printは正常にできた」「(2)エラーは出ていた」「(3)ファイルの作成はできたが中身が書かれていなかった」ということでしょうか?質問文には(1)しか書かれておらず、(2)はこの質疑で、(3)はy-waiwa様との質疑で判明したことです。 それが現在は、「(1)printは正常にできた」「(2)エラーは出なくなった」「(3)ファイルの作成もできなくなった」で正しいでしょうか? 正確に情報を伝えていただくように、お願いします。
toast-uz

2020/09/24 23:17

お手数ですが、以前の状態に戻して再度実行してみて、(1)(2)が含まれている画面出力結果、(3)におけるファイルの、ファイル名、中身が何か、ファイルのタイムスタンプが実行時点とあっているかどうか、を確認ください(可能であればコマンドラインでその出力を示してください)。以前の状態の正確な情報を得ることで、何か新たな問題点が見つかるかもしれません。
fhiro_tokio

2020/09/24 23:19

1. 最初の質問の時点では、print文の内容は表示されましたが、同時にエラーがでていました。 2. 次にf="altext.txt"の部分(なぜかfが全角・・・)の指摘で、file="altext.txt" に変更したら、エラーはなくなりました(print文の内容は表示されています)が、altext.txt のファイルは作成されていますが、何も出力されていません。
toast-uz

2020/09/24 23:21

08:17の私のコメントにあるように、最初の時点の詳細情報を、質問文を修正する形で、提示お願いします。
guest

回答3

0

自己解決

原因は分かりませんでしたが、構文を以下のように変更し、出力されるようになりました。

import requests from bs4 import BeautifulSoup html=requests.get("https://xxxxxxx.jp/").text soup=BeautifulSoup(html,"html.parser") src_alt="" imgs=soup.find_all("img") for i in imgs: src=i["src"] alt=i.get("alt","alt無指定") src_alt=src_alt+src+','+alt+"\n" print(src_alt) f=open("altext2.txt","w") f.writelines(src_alt) f.close()

投稿2020/09/25 00:22

編集2020/09/25 00:23
fhiro_tokio

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

requestsを使っているのにimportが書いてないってことは、(質問には書いていないけれど)Jupyter Lab/Notebookなどを使っていませんか? その場合は、同じノートで以前実行した内容(回答者には知ることが出来ない)の影響を受けるので、新しいノートを作って実行した結果を確認してください。

ところで、修正依頼に書いてある「altext.txt のファイルは作成されていますが、何も出力されていません。」と、別の回答のコメントに書いてある「エラーはなくなりましたが、ファイルすら作成されなくなりました。」が食い違っています。ファイルサイズが0バイトであろうが、ファイルが存在すれば作成されています。

「altext.txt のファイルは作成されていますが、何も出力されていません。」の原因としては、「取得したページに画像がひとつもなかった」なんでオチが想定されます。この場合forループの内容が一度も実行されないので、altext.txtは作成されるだけで何も書かれません。

Python

1from bs4 import BeautifulSoup 2import requests 3 4html = requests.get("http://XXXX.example.com/").text 5soup = BeautifulSoup(html, "html.parser") 6 7with open('altext.txt', "w") as f: 8 imgs = soup.find_all("img") 9 for i in imgs: 10 src = i["src"] 11 alt = i.get("alt", "alt無指定") 12 src_alt = src + ',' + alt 13 print(src_alt) 14 f.write(src_alt + "\n") 15

投稿2020/09/25 00:13

編集2020/09/25 00:14
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fhiro_tokio

2020/09/25 00:21

Jupyter Lab/Notebookなどを使っています。ご指摘の通り、別タブのアプリにはimport requestsが書かれています。改めてimport requestsは先頭に追加しました。エラーは、f="altext.txt"の部分(なぜかfが全角・・・)のときのファイルオープンエラーでした。これをfile="altext.txt" に変更したのでエラーは解消しています。取得しているページにはデータがあり、print文ではimgタグのsrcとaltを表示しています。 原因は分かりませんが、構文を変更した結果出力されました。どう直したのかは自己解決に記載します。
Daregada

2020/09/25 00:31

質問に書かれたのソースのimportとfileへの代入部分を修正するだけで、こちらではaltext.txtにデータが出力されています(改行していないのですべてが1行目にまとまってしまいますが)。
guest

0

f=open(file,"w")

fileになにも代入されてないので、おそらくopenは失敗しています

投稿2020/09/24 21:49

y_waiwai

総合スコア88024

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fhiro_tokio

2020/09/24 22:26

f="altext.txt" をfile="altext.txt" に変更したら、エラーはなくなりましたが、ファイルすら作成されなくなりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問