更改文件 python [duplicate] 中的字符串

change strings in file python [duplicate]

提问人:Vlad Tepes 提问时间:9/8/2023 更新时间:9/8/2023 访问量:28

问:

你能解释一下为什么它以这种方式工作吗? 我有一个文件,我需要在每个字符串末尾的同一个文件中添加一些信息,这取决于字符串中相同位置的值。我尝试过许多变体,但只有当我读取所有行,将它们放入变量中,然后写入文件时,它才有效。这是解决我案子的唯一方法吗?为什么我的第二个代码不能以正确的方式工作(它只在最后一行添加信息)? 或者,在不添加文件内容的情况下,这可能是更简单的解决方案,并且不使用额外的RAM来保留所有大量的文件字符串 对不起,消息太长了)

工作

with open(finalfile, 'r+') as file:
    content = file.readlines()
with open(finalfile, 'r+') as file:
    for line in content:
        if (line.split(sep='|')[2]) == "" or line.split(sep='|')[3] == "":
            newline = str(line.rstrip()) + "|||\n"
            
        else:
            newline = (str(line.rstrip()) + "|" + districtdict[(line.split(sep='|')[2])] + "|" + streetdict[(line.split(sep='|')[3])]).rstrip()+"|\n"
            
        file.write(newline)

不起作用

with open(finalfile, 'r+') as file:
    for line in file:
        if (line.split(sep='|')[2]) == "" or line.split(sep='|')[3] == "":
            newline = str(line.rstrip()) + "|||\n"
            
        else:
            newline = (str(line.rstrip()) + "|" + districtdict[(line.split(sep='|')[2])] + "|" + streetdict[(line.split(sep='|')[3])]).rstrip()+"|\n"
            
        file.write(newline)
python 字符串 文件

评论

2赞 jonrsharpe 9/8/2023
“行”实际上并不存在于文本文件中,它们基本上是一系列连续的字符,其中一些恰好是 .因此,就地“添加到每一行”是不可能的,因为这意味着相应地移动每个后续字符(以及每个后续“行”)。\n
0赞 mozway 9/8/2023
如果您不想将所有内容都加载到 RAM 中,一种更好、更安全的方法是写入临时文件,然后在完成后将旧文件替换为临时文件。这是大多数文本编辑器正在做的事情。
0赞 Karl Knechtel 9/8/2023
@mozway 我不太确定这是否是正确的副本。这确实需要以某种方式清理。
0赞 mozway 9/8/2023
@KarlKnechtel我添加了更多选项,这已经在几个 QA 中涵盖了
0赞 Karl Knechtel 9/8/2023
@mozway 我同意它被很好地覆盖了。但是,只要这类问题经常被问到,Python 策展人就应该就此类问题的规范达成共识。

答: 暂无答案