我一直在寻找如何用新文件替换文件中的多行,但我的代码只是在文件末尾添加一行。如何在适当的位置更换旧线?
path = /path/to/file
new_line = ''
f = open(path,'r+b')
f_content = f.readlines()
line = f_content[63]
newline = line.replace(line, new_line)
f.write(newline)
f.close()
编辑: path = / path / to / file path_new = path +" .tmp" new_line ="" 打开(路径,' r')为inf,打开(path_new,' w')作为outf: for num,enumerate(inf)中的行: 如果num == 64: newline = line.replace(line,new_line) outf.write(新行) 其他: outf.write(线) new_file = os.rename(path_new,path)
答案 0 :(得分:1)
大多数操作系统将文件视为二进制流,因此文件中没有任何内容。因此,您必须使用替换行重写整个文件:
new_line = ''
with open(path,'r') as inf, open(path_new, 'w') as outf:
for num, line in enumerate(inf):
if num == 64:
outf.write(new_line)
else:
outf.write(line)
os.rename(path_new, path)
答案 1 :(得分:1)
通常,您必须重写整个文件。
操作系统将文件公开为字节序列。打开文件时,此序列有一个与之关联的所谓文件指针。打开文件时,指针位于开头。您可以从此位置读取或写入字节,但无法插入或删除字节。读取或写入 n 字节后,文件指针将移位 n 字节。
此外,Python有一种方法来读取整个文件并将内容拆分为一个行列表。在这种情况下,这更方便。
# Read everything
with open('/path/to/file') as infile:
data = infile.readlines()
# Replace
try:
data[63] = 'this is the new text\n' # Do not forget the '\n'!
with open('/path/to/file', 'w') as newfile:
newfile.writelines(data)
except IndexError:
print "Oops, there is no line 63!"