如何逐行替换(更新)文件中的文本
我试图通过读取每一行,对其进行测试,然后编写是否需要更新来替换文本文件中的文本。我不想另存为新文件,因为我的脚本已经先备份了文件并可以进行备份。
到目前为止,这是我所拥有的…我从os.walk()获得了fpath,并保证pathmatch var正确返回:
fpath = os.path.join(thisdir, filename)
with open(fpath, 'r+') as f:
for line in f.readlines():
if '<a href="' in line:
for test in filelist:
pathmatch = file_match(line, test)
if pathmatch is not None:
repstring = filelist[test] + pathmatch
print 'old line:', line
line = line.replace(test, repstring)
print 'new line:', line
f.write(line)
但是最终发生的是,我只得到了几行(正确更新,请注意,但是从文件的开头重复了)。我认为这是一个范围界定的问题。
*另外:我想知道如何仅在匹配的第一个实例上替换文本,例如,我不想匹配显示文本,仅匹配底层的href。
-
首先,您要编写与模式是否匹配的行。否则,您只写出匹配的行。
其次,在阅读各行并编写结果之间,您需要截断文件(
f.seek(0)
然后单击f.truncate()
),或关闭原始文件并重新打开。选择前者,我将得到类似以下内容:fpath = os.path.join(thisdir, filename) with open(fpath, 'r+') as f: lines = f.readlines() f.seek(0) f.truncate() for line in lines: if '<a href="' in line: for test in filelist: pathmatch = file_match(line, test) if pathmatch is not None: repstring = filelist[test] + pathmatch line = line.replace(test, repstring) f.write(line)