![](/img/trans.png)
[英]Python readlines() and append data to each line output to one line
[英]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.