2011-08-25 19 views
10

ファイルを読み込んで、そこのテキストのセクションを変更してから、同じファイルに書き出す必要があります。ファイルを読み込む - 内容を変更する - 同じファイルに書き込む

現在、私は実行します。

f = open(file) 
file_str = f.read() # read it in as a string, Not line by line 
f.close() 
# 
# do_actions_on_file_str 
# 
f = open(file, 'w') # to clear the file 
f.write(file_str) 
f.close() 

しかし、私は同じ結果が得られ、よりニシキヘビのアプローチがあることを想像するだろう。

提案?

答えて

16

これは簡単ではっきりしています。どのような提案はファイルの大きさによって異なります。本当に巨大ではない場合は、大丈夫です。本当に大きければ、チャンクで処理できます。

ただし、コンテキストマネージャを使用して、明示的に閉じることを避けることができます。

with open(filename) as f: 
    file_str = f.read() 

# do stuff with file_str 

with open(filename, "w") as f: 
    f.write(file_str) 
+3

私は一般的にテキストモードでの読書とバイナリで書くことを示唆しているとは確信していませんが、 。 –

+0

@ダッシュああ、私はちょうどそれを投げた。それは本当に私のプラットフォーム上の違いはありません。 ;-) – Keith

+0

ええ、ユニコード文字列と違いがあります。 –

4

あなたが行ずつ作業している場合、あなたが一度にすべてのテキストを処理する必要がある場合、その後、あなたのコードは、決算の世話をwithを使用してビットを最適化することができ

import fileinput 

for line in fileinput.input(mifile, inplace=1): 
    print process(line) 

インプレースモードでfileinputを使用することができますファイル:

with open(myfile) as f: 
    file_str = f.read() 
# 
do_actions_on_file_str 
# 
with open(myfile, 'w') as f: 
    f.write(file_str) 
+0

私は実際にそうで、正規表現ものを行いますファイル全体私は私の質問がそれを反映していないのを見ることができます、私はそれを更新します – pseudosudo

-3

一度にすべてのテキストを処理する必要がある場合、その後、あなたのコードは、それに使用してビットを最適化することができますが、ファイルを閉じるの面倒を見る:

with open(myfile) as f: 
    file_str = f.read() 
# 
do_actions_on_file_str 
# 
with open(myfile, 'w') as f: 
    f.write(file_str) 
+1

これは、@joaquinが2011年に投稿した回答からコピーされたようです。 –

関連する問題