【发布时间】:2011-01-24 04:39:06
【问题描述】:
我试图通过读取每一行,测试它,然后写入是否需要更新来替换文本文件中的文本。我不想另存为新文件,因为我的脚本已经先备份了文件并在备份上进行操作。
这是我目前所拥有的......我从 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)
但最终发生的事情是,我只得到了几行更正(请注意,已正确更新,但从文件的前面部分重复)。我认为这是一个范围界定问题,afaict。
*另外:我想知道如何只在匹配的第一个实例时替换文本,例如,我不想匹配显示文本,只匹配底层的 href。
【问题讨论】:
-
您是否考虑过简单地使用
sed来代替? -
@Amber:在方式上。我真的很想完成这个,以后再学习 sed。我几乎完成了这个...... :)
-
@Ignacio:这根本没有帮助(是的,我已经读过了)。我不是在构建一个包罗万象的解析器,所以它真的不适用。
-
为什么不从备份文件中读取并写入原始文件?
标签: python