我想在原地修改文件的某些字符,而不必将文件的全部内容复制到另一个文件中,或者覆盖现有文件。但是,似乎不可能只用另一个字符替换字符:
>>> 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 :(得分:2)
这是因为您正在使用的模式,在追加模式下,文件指针移到write
之前的文件末尾,您应该以{{1}}模式打开文件:
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"
模式打开它以进行读写。
答案 1 :(得分: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'
否则按照@Guillaume建议的w+
模式打开文件。
答案 2 :(得分: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
它对你有帮助吗?希望如此..
答案 3 :(得分:0)
我相信您可以从这个答案中修改示例。
https://stackoverflow.com/a/290494/1669208
import fileinput
for line in fileinput.input("test.txt", inplace=True):
print line.replace(char1, char2),