繁体   English   中英

我不明白出了什么问题 - Python 多文本替换字典

[英]I can't understand what's wrong - Python multiple text replace dictionary

我不明白发生了什么。 我正在尝试使此脚本使用成对列表替换多个文本文件,但只有第一对有效,其他未处理。 我在循环中犯了什么错误吗?

replacements = [
    ('Dog', 'Cat'),
    ('Lazy', 'Smart'),
    ('Fat', 'Slim'),
]

import re
import sys


if __name__ == "__main__":
    if len(sys.argv) < 2 or len(sys.argv) > 4:
        print("Invalid argument(s)")
        exit()
    with open(sys.argv[1], "r") as f:
        print(f"Reading {sys.argv[1]}")
        new_lines = ""

        for old, new in replacements:
            for l in f:
                new_lines += re.sub(old, new, l)       
        
            
    with open(sys.argv[2] or sys.argv[1], "w") as f:
        print(f"Writing into '{sys.argv[2] or sys.argv[1]}'")
        f.write(new_lines)  
        

双 for 循环导致了这个问题。 仅读取文件内容一次即可解决此问题。

replacements = [
    ('Dog', 'Cat'),
    ('Lazy', 'Smart'),
    ('Fat', 'Slim'),
]

import re
import sys


if __name__ == "__main__":
    if len(sys.argv) < 2 or len(sys.argv) > 4:
        print("Invalid argument(s)")
        exit()
    with open(sys.argv[1], "r") as f:
        print(f"Reading {sys.argv[1]}")
        new_lines = f.read()

        for old, new in replacements:
            new_lines = re.sub(old, new, new_lines)
        
            
    with open(sys.argv[2] or sys.argv[1], "w") as f:
        print(f"Writing into '{sys.argv[2] or sys.argv[1]}'")
        f.write(new_lines)

对于第一个替换对,文件将只被读取一次,然后它将被耗尽,因为文件的所有元素都已被读取一次。
因此,对于下一次替换,将不会读取对文件内容。 这就是为什么它只适用于DogCat对,而不适用于 rest。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM