PythonにStringIOストリームがあることは知っていますが、Pythonではファイルストリームのようなものがありますか?また、私はこれらのことを調べるために良い方法がありますか?ドキュメントなど...PythonでFileIOはありますか?
私が作った「ライター」オブジェクトに「ストリーム」を渡そうとしています。私は、ファイルハンドル/ストリームをこのライターオブジェクトに渡すことができると期待していました。
PythonにStringIOストリームがあることは知っていますが、Pythonではファイルストリームのようなものがありますか?また、私はこれらのことを調べるために良い方法がありますか?ドキュメントなど...PythonでFileIOはありますか?
私が作った「ライター」オブジェクトに「ストリーム」を渡そうとしています。私は、ファイルハンドル/ストリームをこのライターオブジェクトに渡すことができると期待していました。
のPython 3になります()。 (これらは、「ファイルオブジェクト」またはPythonで「ファイルのようなオブジェクト」と呼ばれている)あなたがストリームで実行できるすべてのものにhttp://docs.python.org/library/functions.html#open
outfile = open("/path/to/file", "w")
[...]
outfile.write([...])
ドキュメント:Pythonでhttp://docs.python.org/library/stdtypes.html#file-objects
ほとんど同じように動作する組み込みファイル()があります。ドキュメントはhttp://docs.python.org/library/functions.html#fileとhttp://python.org/doc/2.5.2/lib/bltin-file-objects.htmlです。
ファイルのすべての行を印刷したい場合です:もちろん
for line in file('yourfile.txt'):
print line
.seekのように()、.close()、.read()、.readlines()、もっとあり、...基本的にStringIOと同じプロトコルです。
編集:あなたが開い使用する必要があります()の代わりに、同じAPIを持つファイル()、の - ファイル()私はあなたが開いて探している推測してい
ファイルオブジェクトについては、http://docs.python.org/library/stdtypes.html#bltin-file-objectsを参照してください。 – tsg
、すべてのI/O操作は高レベルのAPIで包まれます:ファイルはオブジェクトを好きです。
これは、オブジェクトが好きなファイルは同じように動作し、それらを期待する関数で使用できることを意味します。これは、ダックタイピングと呼ばれ、オブジェクトのようなファイルのために次のような動作を期待することができます。
StringIO、File、およびオブジェクトのようなすべてのファイルは実際には互いに置き換えられ、I/Oの管理は気にする必要はありません。少しデモとして
、あなたはオブジェクトのようなファイルであるSTDOUT、標準出力、で何ができるか見てみましょう:
import sys
# replace the standar ouput by a real opened file
sys.stdout = open("out.txt", "w")
# printing won't print anything, it will write in the file
print "test"
オブジェクトのようなすべてのファイルが同じように動作し、あなたがそれらを使用する必要があります同じ方法:
import urllib
# urllib doesn't use "open" and doesn't raises only IOError exceptions
stream = urllib.urlopen("www.google.com")
# but this is a file like object and you can rely on that :
for line in steam :
print line
0: # try to open it
# do not bother with checking wheter stream is available or not
try :
stream = open("file.txt", "w")
except IOError :
# if it doesn't work, too bad !
# this error is the same for stringIO, file, etc
# use it and your code get hightly flexible !
pass
else :
stream.write("yeah !")
stream.close()
# in python 3, you'd do the same using context :
with open("file2.txt", "w") as stream :
stream.write("yeah !")
# the rest is taken care automatically
オブジェクトのメソッドのようなファイルが共通の動作を共有することに注意してくださいが、オブジェクトのようなファイルを作成する方法は標準ではありません
最後の世界では、基本的な動作が同じであるのと同じ方法で動作するためではありません。あなたが働いていることを理解することが重要です。最後の例では、インターネットリソース上で "for"ループを使用することは非常に危険です。確かに、あなたは無限のデータストリームに終わらないことを知っています。
print steam.read(10000) # another file like object method
は安全である:使用している場合に
、。 Hight抽象化は強力ですが、その仕組みがどのように機能するかを知る必要はありません。
http://www.python.org/doc/にアクセスできますか?それが物事を見る唯一の方法です。あなたは物事を見るために今何を使用していますか? –