我在文件中存储了一些文本,如下所示:
[10, 1575311969.9649343, 'Hot Brew', 10, True, 'No tank', 'Organic Red Helles']
[101, 1575311971.3570273, 'Hot Brew', 10, True, 'No tank', 'Organic Red Helles']
现在,我想在我的代码中将其作为二维列表:
batches = [[10, 1575311969.9649343, 'Hot Brew', 10, True, 'No tank', 'Organic Red Helles'],
[101, 1575311971.3570273, 'Hot Brew', 10, True, 'No tank', 'Organic Red Helles']]
我尝试使用代码
from ast import literal_eval
with open('runBatchBackup.txt', 'r') as f:
batches = literal_eval('[' + f.read() + ']')
但这导致了
ValueError: malformed node or string: <_ast.Subscript object at 0x03C72BB0>
如何将文本文件转换为所需的格式?
答案 0 :(得分:0)
您的文件是用换行符分隔的,但是literal_eval
需要用逗号分隔每个子列表才能使其可解析。您可以向replace
添加呼叫以执行从换行符到逗号的转换:
batches = literal_eval('[' + f.read().replace('\n', ',') + ']')
结果:
[[10, 1575311969.9649343, 'Hot Brew', 10, True, 'No tank', 'Organic Red Helles'],
[101, 1575311971.3570273, 'Hot Brew', 10, True, 'No tank', 'Organic Red Helles']]
尽管以上代码段清楚地说明了问题,但我还是建议您使用列表理解将literal_eval
应用于每一行:
batches = [literal_eval(line) for line in f]
答案 1 :(得分:0)
我认为单独literal_eval
每行并将它们添加到程序列表中更有意义:
with open('runBatchBackup.txt', 'r') as f:
batches = list(map(literal_eval, f))