如何逐行替换(更新)文件中的文本

发布于 2021-01-29 19:01:08

我试图通过读取每一行,对其进行测试,然后编写是否需要更新来替换文本文件中的文本。我不想另存为新文件,因为我的脚本已经先备份了文件并可以进行备份。

到目前为止,这是我所拥有的…我从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。

关注者
0
被浏览
49
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    首先,您要编写与模式是否匹配的行。否则,您只写出匹配的行。

    其次,在阅读各行并编写结果之间,您需要截断文件(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)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看