python readlines() 只看到一行

python readlines() sees only one line

我想为简单的文件编写简单的解析器。 这是我要解析的文件:

"""{\"dlugosc\":44.41207996473956,\"szerokosc\":5.0144114626069447}"""
"""{\"dlugosc\":33.41207996473956,\"szerokosc\":5.0144114626069447}"""
"""{\"dlugosc\":22.41207996473956,\"szerokosc\":5.0144114626069447}"""
"""{\"dlugosc\":11.41207996473956,\"szerokosc\":5.0144114626069447}"""
...
...

这只是简单的文本文件而已。

这是我的 'parser' 代码:

with open('file.txt', 'r+') as file:
    content = file.readlines()
    for line in content:
        line = line.replace('\', "").replace('"', "").replace('{', "").replace('}', '')

with open('file.txt', 'a') as appending:
    appending.write('\n'+line)

运行 之后的奇怪输出:

"""{\"dlugosc\":44.41207996473956,\"szerokosc\":5.0144114626069447}"""
"""{\"dlugosc\":33.41207996473956,\"szerokosc\":5.0144114626069447}"""
"""{\"dlugosc\":22.41207996473956,\"szerokosc\":5.0144114626069447}"""
"""{\"dlugosc\":11.41207996473956,\"szerokosc\":5.0144114626069447}"""
dlugosc:11.41207996473956,szerokosc:5.0144114626069447

我当然知道 python 替换方法不适用于相同声明的字符串,而是将其复制为新对象,所以你可以看到我已经制作了这一行 - line = line.replace('\', "").replace('"', "").replace('{', "").replace('}', '')

我的问题是为什么输出看起来像上面这样 - 只解析了最后一行? 我也知道这个 a 附加 arg,这就是我想要实现的 - 旧行应该保留在文件中,但我希望它们也都被解析。

谢谢!

因为在这个代码块中,你只写了一行。

with open('file.txt', 'a') as appending:
    appending.write('\n'+line)

您可以将要附加的行存储在列表中并单独附加它们。

result = []

with open('file.txt', 'r+') as file:
    content = file.readlines()
    for line in content:
        result.append(line.replace('\', "").replace('"', "").replace('{', "").replace('}', ''))

with open('file.txt', 'a') as appending:
    appending.write('\n')
    for line in result:
        appending.write(line)

您的循环和文件写入并没有像您想象的那样嵌套;当你写:

with open('file.txt', 'a') as appending:
    appending.write('\n'+line)

...这在 for line in content 循环之外,所以只有一个 line 要写!

相反,请尝试以下操作:

with open('file.txt', 'r+') as file:
    content = file.readlines()
    
    # at this point, the stream should be at the end of the file, 
    # so it's safe to write for appending
    for line in content:
        line = line.replace('\', "").replace('"', "").replace('{', "").replace('}', '')
        file.write("\n" + line)

...尽管我真的不建议将同一个文件作为模式进行读写;通常您希望保留原始文件以防万一您需要从头开始重新创建数据转换