質問するログイン新規登録

Q&A

解決済

3回答

8912閲覧

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

fhiro_tokio

総合スコア66

ファイルI/O

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

Python

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

0グッド

0クリップ

投稿2020/09/24 21:04

編集NaN/aN/aN aN:aN

0

0

以下、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ページで確認できます。

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

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

総合スコア11992

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

総合スコア88206

fhiro_tokio

2020/09/24 22:26

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問