Python,将文件中的列表读取出来并作为列表赋给变量

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python,将文件中的列表读取出来并作为列表赋给变量相关的知识,希望对你有一定的参考价值。

比如,文件中保存的是一个list:

[1,2,3,4,5,6,7]
用open + read()
并赋值给一个变量a,这是作为字符串类型来进行的,
此时 a=‘[1,2,3,4,5,6,7]’
求问如何怎么在读取后,把字符串转成list
像这样
a=[1,2,3,4,5,6,7]

参考技术A

如果是a="[1,2,3,4,5,6,7]",那么可以替换掉方括号,然后用split方法拆分字串

a="[1,2,3,4,5,6,7]"
a=a.replace('[', '')
a=a.replace(']', '')
a=map(lambda i: int(i), a.split(','))

参考技术B >>> a='[1,2,3,4,5,6,7]'
>>> a=eval(a)
>>> a
[1, 2, 3, 4, 5, 6, 7]追问

像这样的情况,还有什么其他的类型转换时可用的函数吗?谢谢

本回答被提问者采纳
参考技术C 如果确定a的格式无误的话,可以直接试试:eval(a) 参考技术D 可以使用正则表达式。
或者可以看[符号 看到一个[开始存,到]为止,不行的话就只能使用正则表达式了。
import re

从文本文件中读取列表元组作为元组,而不是字符串 - Python

【中文标题】从文本文件中读取列表元组作为元组,而不是字符串 - Python【英文标题】:Read in tuple of lists from text file as tuple, not string - Python 【发布时间】:2011-06-17 11:53:52 【问题描述】:

我有一个要读取的文本文件,其中包含多行元组。文本中的每个元组/行的形式为 ('description string', [list of integers 1], [list of integers 2])。文本文件可能类似于:

('项目 1', [1,2,3,4] , [4,3,2,1]) ('项目 2', [ ] , [4,3,2,1]) ('项目 3, [1,2] , [ ])

我希望能够从文本文件中读取每一行,然后将它们直接放入一个函数中,

function(string, list1, list2)

我知道每一行都是作为一个字符串读入的,但我需要以某种方式提取这个字符串。我一直在尝试使用 string.split(','),但是当我点击列表时就会出现问题。有没有办法做到这一点,还是我必须修改我的文本文件?

我还有一个元组列表的文本文件,我想以类似的形式读取它,格式为

[(1,2),(3,4),(5,6),...]

可能包含任意数量的元组。我想在列表中阅读它并为列表中的每个元组执行一个 for 循环。我认为这两个将使用大致相同的过程。

【问题讨论】:

【参考方案1】:

您可能还想查看pickle 模块,用于将 python 对象保存到文本文件中,然后再将它们读回。

【讨论】:

【参考方案2】:

使用eval 怎么样?

编辑使用ast.literal_eval查看@Ignacio的答案。

>>> c = eval("('item 1', [1,2,3,4] , [4,3,2,1])")
>>> c
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])

只有在您 100% 确定文件内容的情况下,我才建议您这样做。

>>> def myFunc(myString, myList1, myList2):
...     print myString, myList1, myList2
... 
>>> myFunc(*eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]

请参阅@Ignacio 的回答……安全得多。

应用 ast 会产生:

>>> import ast
>>> def myFunc(myString, myList1, myList2):
...     print myString, myList1, myList2
... 
>>> myFunc(*ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])"))
item 1 [1, 2, 3, 4] [4, 3, 2, 1]

【讨论】:

【参考方案3】:

您正在寻找ast.literal_eval()

>>> ast.literal_eval("('item 1', [1,2,3,4] , [4,3,2,1])")
('item 1', [1, 2, 3, 4], [4, 3, 2, 1])

【讨论】:

我可能应该提到我正在运行 Python 2.3,这是用于更高版本的吗?我找不到 ast 模块。 @Das.Rot:不幸的是。 @Das.Rot:看起来是 2.6+。如果您确定内容,那么eval 将起作用。 天啊,这对我来说解决了一件非常重要的事情。我正在使用 ConfigParser。我正在将一个元组作为配置设置的参数之一写入文件。使用它可以让我读回代表元组的字符串并将其转换回元组。这对于在配置文件中创建数据列表或元组非常强大。

以上是关于Python,将文件中的列表读取出来并作为列表赋给变量的主要内容,如果未能解决你的问题,请参考以下文章

将嵌套dict的值赋给python中的列表

如何将 csv 文件转换为可作为文本读取的列表列表? Python

python怎么将读出来的文件放到列表

如何将文件作为列表/字典读取? [复制]

python:将文件读取并拆分到字典列表中

Python:将 a 附加到字典中的列表