首页 > 解决方案 > Infile 替换清空文件

问题描述

我试图就地替换一些 html 行

但它导致空文件。

我正在检查 line 是否有特定的字符串并尝试替换它

with fileinput.FileInput(bmark_file, inplace=True, backup='.bak') as file:
    for line in file :
        unique="id="+core
        if unique in line:
            print(line.replace(link['href'], vboard[core.lower()]['benchmarks.tls']), end='')

实际上,即使条件失败,infile 模块也不应该清空文件

对此的任何输入都会有所帮助

标签: pythonpython-3.xfile-io

解决方案


只有 print在测试通过时才 ing,因此任何未通过测试的行都不会出现在新文件中(FileInputwithinplace=True用您发出的任何内容替换原始文件sys.stdout;如果您不发出任何内容,它什么都不写)。如果您希望其他行不变通过,则需要在这种else情况下输出原始行:

with fileinput.FileInput(bmark_file, inplace=True, backup='.bak') as file:
    for line in file :
        unique="id="+core
        if unique in line:
            print(line.replace(link['href'], vboard[core.lower()]['benchmarks.tls']), end='')
        else:
            print(line, end='')  # Or just sys.stdout.write(line)

您的文件最终为空的事实意味着unique in line测试从未通过,因此您可能期望不存在的数据。


推荐阅读