如何在Python中读取文本文件中的列表?

2024-07-05 14:41:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要读一个这样的文本文件

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

在我把用户的信息添加到下面之前,它运行得很好。你知道吗

有没有办法只看课文中的单子?你知道吗


Tags: comdataoutlook文本文件delchinabrucesamsung
2条回答

假设除了封装列表之外,您不打算将括号用于任何目的,那么这应该是可行的。你知道吗

import re
import ast

matches = []
data = open("test.txt", 'r').read()
for listString in re.findall(r"\[.*\]", data):
  matches.append(ast.literal_eval(listString))

您可以使用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()开头,则对其使用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

如果用户信息总是只有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('[')]

相关问题 更多 >