繁体   English   中英

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}"""
...
...

它只是简单的文本文件,没有别的。

这是我的“解析器”代码:

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)

...这for line in content循环中的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)

...虽然我真的不建议从同一个文件中读取和写入作为模式; 通常,您希望保留原始文件,以防万一您需要从头开始重新创建数据转换

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

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)

暂无
暂无

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

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