2017-09-12 12 views
0

コードから1つの例をコピーして、すでに作成されたファイル(utf-8を使用)を読み書きします。事は、私はそれを実行したときに私が持っているコードは何も印刷されないということです。IOがPython 3で書込み/読込みされない

#encoding = utf-8 
import io 


f = io.open("abc.txt", "wt", encoding = "utf-8") 
texto = u"Writing with díférént chars" 
f.write(texto) 
f.close 


text = io.open("abc.txt", encoding = "utf-8").read() 
print(text) 
+1

'f.close'は' f.close() 'ではありません - 実際にファイルを閉じるわけではありません。 –

答えて

1

あなたはcloseへの呼び出し中に括弧が欠落しています

f.close() 

それはで私のために印刷していることの追加しますpython2とpython3の両方。バッファリングIO(io.openを使用して、デフォルト)への書き込み

が原因となることがありを延期することに書き込み - 特に(default buffer size未満)少量のデータを書き込むとき。ファイルは決してクローズされないので、バッファは決してディスクにフラッシュされません。その後の読み取りでは、ファイルが切り捨てられていると見なします(ファイルが書き込み用に開かれたときの初期状態)。

私は強く(あなたも、ファイルを閉じて考える必要はありませんよう)の代わりにcontextmanagerプロトコルを使用することをお勧めしたい:

# encoding: utf-8 
import io 


with io.open("abc.txt", "wt", encoding="utf-8") as f: 
    texto = u"Writing with díférént chars" 
    f.write(texto) 


with io.open("abc.txt", encoding="utf-8") as f: 
    print(f.read()) 
+0

バイナリ書き込みがバッファリングされていないことを確認してください(テキストとしてオープンされたファイルのみが出力バッファリングの影響を受けます)。その旨の文書を指摘できますか? (私はまた、書き込みが延期されていると言っていることを躊躇しています - それは、フラッシュされるまで目に見えない*アサーションのように聞こえます。書き込みサイズとバッファサイズの違い、ローカル標準Cライブラリの書き込みバッファリング動作、その他の実行時の詳細と設定)。 –

+0

バイナリ書き込みに関するコメントはありませんでした。これはデフォルトでもバッファリングされています。私はそれを現在の状態で私の答えからどのように引き出すことができるかを見ています。それに応じて更新します:)バッファリングはCライブラリとは独立して[pythonで実装されています](https://docs.python.org/3/library/io.html#io.BufferedWriter)。 –

関連する問題