【问题标题】:What is the best way to modify txt file's lines in Python在 Python 中修改文本文件行的最佳方法是什么
【发布时间】:2020-04-22 21:33:44
【问题描述】:

例如。我希望删除/添加/更改 txt 文件中 24 到 40 之间的行。 我将 txt 文件导入以逐行列出。并修改列表然后重写一个新文件。 这是我的代码:

def deletetfile(file):
    file = open(file)
    content = file.read()
    lines = content.splitlines()
    print(lines)
    del lines[24:40]
    print(lines)
    with open("testfile2.txt", "w") as f:
        for i in lines:

            f.write(i+'\n')

if __name__ == "__main__":
    deletetfile('testfile.txt')

但我认为它在一个非常大的文件中运行会很慢。
有没有更好的方法在python中修改txt文件的行?

【问题讨论】:

标签: python


【解决方案1】:

除了潜在的性能问题外,在内存中读取整个文件可能会导致内存错误,因此最好在需要注意时避免它。在您的情况下,简单的解决方案是逐行读取源文件(通过迭代文件),将要保留的行复制到新文件中,然后删除原始文件并将新文件重命名为旧文件。另外,请注意总是关闭您的文件(使用with 语句是这样做的规范方式):

def delete_lines(file_path, start, end):
    tmp_path = "{}.tmp".format(file_path)
    with open(file_path) as src, open(tmp_path, "w") as dest:
        for lineno, line in enummerate(src):
            if lineno < start or lineno > end:
                dest.write(line)
    os.remove(filepath)
    os.rename(tmp_path, file_path)

if __name__ == "__main__":
    delete_lines('testfile.txt', 24, 40)

nb:未经测试的代码,请仔细检查 - 但你明白了 ;-)

【讨论】:

    【解决方案2】:

    摆脱 for 循环并用类似的东西替换它:

    f.write(”\n”.join(lines))
    

    【讨论】:

      猜你喜欢
      • 2020-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-18
      • 1970-01-01
      • 2010-11-06
      • 2010-10-02
      • 2021-01-14
      相关资源
      最近更新 更多