2

我想就地修改文件的某些字符,而不必将文件的全部内容复制到另一个文件中,或覆盖现有文件。但是,似乎不可能只用另一个字符替换一个字符:

>>> 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”,但事实并非如此。有没有办法做到这一点?

4

4 回答 4

3

那是因为您使用的模式,在追加模式下,文件指针移动到文件末尾之前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+以读写模式打开它。

于 2013-06-28T16:01:11.100 回答
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 的建议以模式打开文件。

于 2013-06-28T15:59:35.847 回答
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

它会帮助你吗?希望如此..

于 2013-06-28T16:14:22.217 回答
0

我相信您可以从此答案中修改示例。

https://stackoverflow.com/a/290494/1669208

import fileinput

for line in fileinput.input("test.txt", inplace=True):
    print line.replace(char1, char2),
于 2013-06-28T16:15:12.007 回答