2011-08-25 43 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() 

但我想有一個更Python的辦法,產生了相同的結果。

對此提出建議?

回答

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

@dash噢,我只是把它扔進去。它在我的平臺上並沒有真正的改變。 ;-) – Keith

+0

是的,但它與unicode字符串有所不同。 – 2011-08-25 19:14:58

4

如果通過線工作線,如果你需要同時處理所有的文本,您可以使用fileinput與就地模式

import fileinput 

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

,那麼你的代碼可以被優化利用with一點是需要關閉的護理該文件:

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年發佈的答案中複製而來的。 –