在python中将txt文件作为列表而不是字符串读取

在python中将txt文件作为列表而不是字符串读取,python,io,Python,Io,我有一个由以下格式的行组成的文件:- [123, something, some other thing, "text that i want", more details] 例如:- 现在我想把这个列表直接读到python中,而不是先把字符串拆分,然后再把它连接起来,因为文本部分可以有一个“,”,我不想拆分它 我在找这样的东西: with open("input.txt") as fp: for line in fp: corpus.append(line[3]) #re

我有一个由以下格式的行组成的文件:-

[123, something, some other thing, "text that i want", more details]
例如:-

现在我想把这个列表直接读到python中,而不是先把字符串拆分,然后再把它连接起来,因为文本部分可以有一个“,”,我不想拆分它

我在找这样的东西:

with open("input.txt") as fp:
   for line in fp:
       corpus.append(line[3]) #read only text

您的输入显然是通过调用
print
ing out Python列表(或者对它们调用
str
repr
)生成的

可以使用以下方法处理此特定示例:

然而,这通常不会适用于所有Python列表显示。当它不起作用的时候…嗯,一般来说,你没什么可以做的。但是你可以一直
literal\u eval
直到你得到一个错误,然后,对于每一个错误,你都会费力地想出如何预处理来解决它


正确的做法是生成实际可解析的输出,如JSON,然后您就可以简单地解析它。

您最初创建此文件的可能副本是什么?如果是这样的话,正确的做法是修复创建此文件的方式,使用某种格式存储为文本,然后重新解析,如JSON。不,我没有,也没有控制此输入。如果这是家庭作业或作业的一部分,你至少应该确保你的老师、老板或任何认识到他们给你的任务本来应该是琐碎的,但实际上是痛苦和脆弱的,这纯粹是因为其他人正在使用Python
repr
作为持久性格式,这是一个糟糕的想法,而且很容易在源代码处修复。@除非您能保证所有字符串都没有逗号、反斜杠转义的反斜杠、引号或特殊字符,否则该问题的答案将无效。(另外,您还需要一种方法来删除每个字符串周围的
u'…'
)这里的ast是什么?@DivyangVashi它是
literal\u eval
所在的模块。单击问题中的链接以查看其文档。
ast
模块设计用于解析Python代码。“literal_-eval”隐藏在那里的原因是,它使用
ast
模块将输入解析为Python源代码,并阻止人们使用
repr
literal_-eval
作为持久化方法,因为这将是一个吸引人的麻烦(这是一个糟糕的想法,但一开始可能看起来是个好主意……)。
with open("input.txt") as fp:
   for line in fp:
       corpus.append(line[3]) #read only text
with open("input.txt") as fp:
    for line in fp:
        obj = ast.literal_eval(line)
        corpus.append(obj[3])