web-dev-qa-db-ja.com

pythonでファイルオブジェクトを文字列として読み取る

ページの読み取りにurllib2を使用しています。ソースで簡単な正規表現を実行していくつかの変数を引き出す必要がありますが、urllib2は文字列ではなくファイルオブジェクトとして表示されます。

pythonを初めて使用するので、ファイルオブジェクトを使用してこれを行う方法を確認するのに苦労しています。これを文字列にすばやく変換する方法はありますか?

31
Oli

Pythonをインタラクティブモードで使用して、ソリューションを検索できます。

fがオブジェクトの場合、dir(f)と入力して、すべてのメソッドと属性を表示できます。 readというものがあります。 help(f.read)と入力すると、f.read()がファイルオブジェクトから文字列を取得する方法であることがわかります。

77
stesch

ドキュメントから file.read() (私の強調):

file.read([size])

ファイルから最大でサイズバイトを読み取ります(サイズバイトを取得する前にEOFがヒットした場合は除きます)。サイズ引数が負の値または省略されている場合は、EOFに達しました。バイトは文字列オブジェクトとして返されますEOFの場合、空の文字列が返されます(ttysのような特定のファイルの場合、EOFがヒットした後も読み取りを継続することは理にかなっています。)このメソッドは、基になるC関数freadを2回以上呼び出す可能性があることに注意してください。また、非ブロッキングモードでは、サイズパラメータが指定されていない場合でも、要求されたデータよりも少ないデータが返される可能性があることに注意してください。

大きな文字列オブジェクトの正規表現検索は効率的でない可能性があることに注意し、 file.next() を使用して1行ずつ検索することを検討してください(ファイルオブジェクトは独自のイテレータです)。

13
gimel

Michael Foord、別名Voidspaceにはurllib2に関する優れたチュートリアルがあり、次の場所にあります。 rllib2-The Missing Manual

あなたがやっていることはかなり簡単なはずです、このサンプルコードを観察してください:

import urllib2
import re
response = urllib2.urlopen("http://www.voidspace.org.uk/python/articles/urllib2.shtml")
html = response.read()
pattern = '(V.+space)'
wordPattern = re.compile(pattern, re.IGNORECASE)
results = wordPattern.search(html)
print results.groups()
5
t3rse