2013-06-28 53 views
1

我想在原地修改某個文件的某些字符,而不必將該文件的全部內容複製到另一個文件中,或者覆蓋現有文件中的某個字符。然而,這似乎並不可能僅僅通過替換另一個字符:用文件中的另一個字符替換字符

>>> f = open("foo", "a+") # file does not exist 
>>> f.write("a") 
1 
>>> f.seek(0) 
0 
>>> f.write("b") 
1 
>>> f.seek(0) 
0 
>>> f.read() 
'ab' 

在這裏我有預期的「A」至「B」代替,以便該文件的內容將只是「b」,但事實並非如此。有沒有辦法做到這一點?

+0

其答案是否需要是純Python?你願意使用系統命令嗎? – screenmutt

+0

@screenmutt:我更喜歡Python的方式,但是如果在Python中沒有辦法做到這一點,是的,我打開使用系統命令來做到這一點。 – michaelmeyer

回答

2

那是因爲你正在使用的模式,在追加模式,文件指針write前移到文件的末尾,你應該w+模式下打開文件:

f = open("foo", "w+") # file does not exist 
f.write("samething") 
f.seek(1) 
f.write("o") 
f.seek(0) 
print f.read() # prints "something" 

如果你想要在不截斷現有文件的情況下執行該操作,應該在r+模式下將其打開,以便讀取和寫入。

+0

事實上,該文件不會爲空,而且我也不想覆蓋它。 – michaelmeyer

+0

是啊,其實你應該用r +來讀取/寫入而不是截斷 – Guillaume

+0

啊哈,它的工作原理!謝謝! – michaelmeyer

1

截斷使用file.truncate第一個文件:

>>> f = open("foo", "a+") 
>>> f.write('a') 
>>> f.truncate(0) #truncates the file to 0 bytes 
>>> f.write('b') 
>>> f.seek(0) 
>>> f.read() 
'b' 

w+模式,否則打開該文件由@Guillaume的建議。

+0

這實際上刪除了文件的內容。 – michaelmeyer

+1

只能以附加模式覆蓋的方式@doukremt – Stephan

0
import fileinput 

for line in fileinput.input('abc', inplace=True): 
    line = line.replace('t', 'ed') 
    print line, 

這並不是逐字符替換,而是掃描每行代替所需字符並寫入修改過的行。

例如: 文件 'ABC' 載:

i want 
to replace 
character 

執行後,輸出會是:

i waned 
edo replace 
characeder 

是否有助於你?希望如此..

相關問題