替换非标准文本文件的特定行中的字符串

时间:2017-04-26 16:44:32

标签: python string replace

与发布:Replace string in a specific line using python类似,但结果并没有在我稍微不同的实例中预先设定。

我在Windows 7上使用python 3.我正在尝试批量编辑目录中的某些文件。它们基本上是带有.LIC标记的文本文件。我不确定这与我的问题是否相关。我可以毫无问题地将文件读入python。 我的目标是替换此文件中特定行的特定字符串。

import os
import re

groupname = 'Oldtext'
aliasname = 'Newtext'

with open('filename') as f:
    data = f.readlines()
    data[1] = re.sub(groupname,aliasname, data[1])
    f.writelines(data[1])

print(data[1])
print('done')

运行上面的代码时,我得到UnsupportedOperation: not writable。我有一些问题将更改写回文件。根据其他帖子的建议,我编辑时将w选项添加到open('filename', "w")功能。这会导致文件中的所有文本被删除。

根据建议,尝试了r+选项。这导致成功编辑文件,但是,编辑的行不会编辑正确的行,而是附加到文件的末尾,保留原始文件。

1 个答案:

答案 0 :(得分:0)

将更改的行写入文本文件的中间是不可行的,除非它与原始文件的长度完全相同 - 在您的示例中就是这种情况,但您有一些明显的占位符文本在那里我不知道你的实际应用程序代码是否也是如此。这是一种不做任何此类假设的方法:

with open('filename', 'r') as f:
    data = f.readlines()
data[1] = re.sub(groupname,aliasname, data[1])
with open('filename', 'w') as f:
    f.writelines(data)

编辑:如果你真的只想把单行写回文件,你需要在阅读该行之前使用f.tell(),记住它在文件中的位置,然后{{ 1}}在写作之前回到那个位置。