Skip to main content
 首页 » 编程设计

python之如何只读取 Python 文本文件中的列表

2025年05月04日18txw1958

我需要读取这样的文本文件

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('[')]