python 是否可以使用文本文件中的列表作为列表数据结构?

jdgnovmf  于 2023-03-16  发布在  Python
关注(0)|答案(4)|浏览(134)

我们有一个states.txt,其中包含了美国所有州的列表,格式如下:

state =[
'Alabama',
'Alaska',
'Arizona',
. . .
'West Virginia',
'Wisconsin',
'Wyoming'
]

省略号(......)是按字母顺序排列的美国其他州。
我想在Python中把它当作一个列表使用:

state = ['Alabama', 'Alaska', 'Arizona', . . . 'Wyoming']

但是使用read()会将文件作为整个字符串返回,并且由于格式split()strip()似乎不起作用。
这是可以做到的吗?或者是直接复制并粘贴到.py中的唯一方法?

pzfprimi

pzfprimi1#

当然,你可以使用ast.literal_eval将Python常量转换成Python值。与evil相反,这个函数使用起来很安全。首先在=上进行拆分(只拆分一次,以确保其名称中包含等号的任何状态不会被弄乱:P),忽略开头的赋值,以获得纯列表常量,然后解析它:

file_contents = """
state =[
'Alabama',
'Alaska',
'Wisconsin',
'Wyoming'
]
"""

import ast

state_string = file_contents.split("=", 1)[1]
state = ast.literal_eval(state_string)
# => ['Alabama', 'Alaska', 'Wisconsin', 'Wyoming']
vohkndzv

vohkndzv2#

可以使用exec()将文本作为python代码执行

file_contents = """
state =[
'Alabama',
'Alaska',
'Wisconsin',
'Wyoming'
]
"""
exec(file_contents)
print(state)

/*  ['Alabama', 'Alaska', 'Wisconsin', 'Wyoming'] */
dgiusagp

dgiusagp3#

我更愿意将其保存为json数组,然后将文件内容解析为json。

{
    "states": ["Alabama", "Alaska"]
}
import json
file = open('states.json', 'r')
list_of_states = json.loads(file.read())
kgsdhlau

kgsdhlau4#

可以使用ast.parse将Python语句解析为AST,并在Assignment节点的值中输出List节点中Constant节点的值,该节点应该是Module主体的第一条语句:

import ast

data = '''state = [
'Alabama',
'Alaska'
]'''

print([node.value for node in ast.parse(data).body[0].value.elts])

这将输出:

['Alabama', 'Alaska']

这种方法比使用ast.literal_eval更健壮,因为它允许第一个等号成为注解的一部分。
演示:https://replit.com/@blhsing/FinancialUnlawfulDividend

相关问题