当前位置: 首页 > 面试题库 >

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

李谦
2023-03-14
问题内容

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

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


 类似资料:
  • 问题内容: 我正在尝试编辑matlabfile并替换某些特定行中的一些编码部分init。但是,使用下面的格式进行更改将完全不会更改行上下文。(它将打印相同的旧行)。知道我在做什么错吗?’replaceAll’不适合用其他词替换某些词吗? 提前致谢。 问题答案: 该方法在将正则表达式作为参数,并在正则表达式的一些字符有特殊的含义,比如在你的表达括号。 只需改用采用文字字符串的方法即可: 不要被方法的

  • 问题内容: 如何替换在文本文件中找到的一行文本? 我有一个字符串,例如: 我想用更新它: (反之亦然) 我该如何完成? 顺便说一句,我只想替换已读取的行。不是整个文件。 问题答案: 在底部,我有一个通用的解决方案来替换文件中的行。但是首先,这是眼前特定问题的答案。辅助功能: 然后调用它: 原始文本文件内容: Output: New text file content: And as a note,

  • 问题内容: 我的一个同事写了一堂课。他的班级使用我的班级。他没有告诉JVM每次编译类时我的类都在哪里,而是将这两个类打包到一个jar文件中,我可以像这样运行: 现在,我决定对班级进行更改。因此,由于我的班级已经预编译到他的jar中,所以他的班级(我仍然需要使用)使用我的旧班级。我的同事离开了,我不知道他如何将所有内容打包到一个jar文件中供我使用。 现在,当我尝试使用时,当他的班级调用我的班级时,

  • 问题内容: 我的Linux机器上有一个2GB的文本文件,我正尝试将其导入数据库。 我遇到的问题是,正在处理此rdf文件的脚本在一行上令人窒息: 我想替换用。我无法在所有行上进行搜索/替换,但是我有行号,因此我希望有一些简单的方法可以将一行替换为新文本。 有什么想法/建议吗? 问题答案:

  • 问题内容: 如何使用php替换特定行。我不知道行号。我要替换包含特定单词的行。 问题答案: 您可以在较小的文件上使用一种方法,该文件可以两次装入您的内存: 快速说明,PHP> 5.3.0支持lambda函数,因此您可以删除命名的函数声明并将映射缩短为: 从理论上讲,您可以使它成为单个(很难理解)的php语句: 您应该对较大的文件使用另一种(较少占用内存的方法):

  • 问题内容: 我正在运行Python 2.7。 我有三个文本文件:,,和。现在,包含我要搜索的几行并将该部分替换为中的内容。这是一个简单的示例: data.txt find.txt replace.txt 所以,在上面的例子中,我要搜索的所有出现,以及在数据和更换这些线路。 我在使用正确的方法时遇到了一些麻烦,因为我的内存大约为1MB,所以我想尽可能地提高效率。一种愚蠢的方法是将所有内容连接成一个长