2009-08-27 7 views
1

PythonにStringIOストリームがあることは知っていますが、Pythonではファイルストリームのようなものがありますか?また、私はこれらのことを調べるために良い方法がありますか?ドキュメントなど...PythonでFileIOはありますか?

私が作った「ライター」オブジェクトに「ストリーム」を渡そうとしています。私は、ファイルハンドル/ストリームをこのライターオブジェクトに渡すことができると期待していました。

+2

http://www.python.org/doc/にアクセスできますか?それが物事を見る唯一の方法です。あなたは物事を見るために今何を使用していますか? –

答えて

5

ほとんど同じように動作する組み込みファイル()があります。ドキュメントはhttp://docs.python.org/library/functions.html#filehttp://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を持つファイル()、の - ファイル()私はあなたが開いて探している推測してい

+0

ファイルオブジェクトについては、http://docs.python.org/library/stdtypes.html#bltin-file-objectsを参照してください。 – tsg

1

、すべてのI/O操作は高レベルのAPIで包まれます:ファイルはオブジェクトを好きです。

これは、オブジェクトが好きなファイルは同じように動作し、それらを期待する関数で使用できることを意味します。これは、ダックタイピングと呼ばれ、オブジェクトのようなファイルのために次のような動作を期待することができます。

を求めてオープン/クローズ/ IO例外
  • 反復
  • バッファリング
  • 読み取り/書き込み/

    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抽象化は強力ですが、その仕組みがどのように機能するかを知る必要はありません。

  • 関連する問題