用python替换文本文件中的行。如何?

时间:2015-12-31 09:38:11

标签: python

我一直在寻找如何用新文件替换文件中的多行,但我的代码只是在文件末尾添加一行。如何在适当的位置更换旧线?

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)

2 个答案:

答案 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!"