我需要读取这样的文本文件
bruce
chung
bruce@outlook.com
8893243
costarricense
divisa del informe colones
['nokia', 5277100.0, 'china']
['samsung', 10554200.0, 'turkey']
['apple', 52771000.0, 'argentina']
但我只需要读取文件中的列表并将它们分配给一个新变量。
我用过
data =[ast.literal_eval(x) for x in open("test.txt")]
registros = data
在我添加下面的用户信息之前,它运行良好。
有没有办法只读取文本中的列表?
请您参考如下方法:
您可以使用 str.startswith() 来检查字符串是否以 '[' 开头,并使用 ast.literal_eval()只有那是真的。示例 -
with open("test.txt") as f:
registros = [ast.literal_eval(x) for x in f if x.startswith('[')]
演示 -
>>> s = """bruce
... chung
... bruce@outlook.com
... 8893243
... costarricense
... divisa del informe colones
... ['nokia', 5277100.0, 'china']
... ['samsung', 10554200.0, 'turkey']
... ['apple', 52771000.0, 'argentina']""".splitlines()
>>> import ast
>>> registros = [ast.literal_eval(x) for x in s if x.startswith('[')]
>>> registros
[['nokia', 5277100.0, 'china'], ['samsung', 10554200.0, 'turkey'], ['apple', 52771000.0, 'argentina']]
对于评论中更新的要求——
How can I also read only the user info and assign it to a variable using this method?
假设任何不是列表的行都是用户信息的一部分
您可以使用一个简单的 for 循环,如果该行不是以 '[' 开头,则继续附加到一个变量,如果是,则使用 ast.literal_eval(),并将其附加到 registros 列表。
例子-
import ast
with open("test.txt") as f:
user_info = ''
registros = []
for line in f:
if line.startswith('['):
registros.append(ast.literal_eval(line))
else:
user_info += line
如果 user_info 总是只有 6 行(如评论中给出的那样),您还可以使用 -
import ast
with open("test.txt") as f:
user_info = ''
for i,line in enumerate(f):
user_info += line
if i==5:
break
registros = [ast.literal_eval(x) for x in f if x.startswith('[')]
