如何通过从文件读取来构建python数据结构

如何通过从文件读取来构建python数据结构,python,serialization,Python,Serialization,我想通过从文本文件中读取列表来构建一个列表或列表列表 例如,我有一个文件'mylist.txt'说 mylist = [ 1, 2, 3, 4] myotherlist = [ [1, 3, 4, 5], [3, 5, 3, 6] ] 我想先读取该文本文件,然后在python脚本中使用它 可能吗? 我只是在python语法中使用上面的示例。 我的目标是避免自己编写解析逻辑。XML对于我来说似乎太复杂了 谢谢。如果我有以下数据文件(data.txt):- 然后这个代码会将它读入一个列表 f

我想通过从文本文件中读取列表来构建一个列表或列表列表

例如,我有一个文件'mylist.txt'说

mylist = [
1,
2,
3,
4]

myotherlist = [
 [1, 3, 4, 5],
 [3, 5, 3, 6]
]
我想先读取该文本文件,然后在python脚本中使用它

可能吗? 我只是在python语法中使用上面的示例。 我的目标是避免自己编写解析逻辑。XML对于我来说似乎太复杂了


谢谢。

如果我有以下数据文件(data.txt):-

然后这个代码会将它读入一个列表

from ast import literal_eval

with open('data.txt') as fsock:
   mylist = literal_eval( fsock.read() )

这也适用于其他数据类型,例如字典。有关更多详细信息,请参阅文档。

如果您有
[1,2,3,4]
格式的内容,在这种情况下,您可以使用
ast

In [1]: import ast

In [2]: with open('lists.txt', 'rb') as f:
   ...:     lists = f.readlines()
   ...:     
   ...:     

In [3]: list_container = [ast.literal_eval(line.strip()) for line in lists]

In [4]: list_container
Out[4]: [[1, 2, 3], [[1, 2, 3], [4, 5, 6]]]
在本例中,
lists.txt
如下所示:

[1, 2, 3]
[[1, 2, 3], [4, 5, 6]]
但是,如果您的文件看起来与上面所述完全相同,则可以使用
exec
,尽管使用
exec
eval
等内容时应始终小心:

In [2]: with open('test.txt', 'rb') as f:
   ...:     contents = f.read()
   ...:     
   ...:     

In [3]: exec(contents)

In [4]: mylist
Out[4]: [1, 2, 3, 4]

In [5]: myotherlist
Out[5]: [[1, 3, 4, 5], [3, 5, 3, 6]]

In [6]: print contents
mylist = [
1,
2,
3,
4]

myotherlist = [
 [1, 3, 4, 5],
 [3, 5, 3, 6]
]

如果它是一个列表列表,那么您应该直接在mylists.txt文件中定义它

e、 g

并将mylists.txt重命名为mylists.py

然后,使用同一目录中的另一个Python脚本,您只需

import mylists
for sublist in mylists.MYLIST:
    for elem in sublist:
        ....

这不需要解析代码,Python“数据”文件也很容易手工编辑。

因为您似乎暗示将列表作为文本存储到文件中,然后再将其读回,所以草莓的
ast
示例可能是最好的。但如果您不熟悉它,我也会抛出该方法,它是一个二进制序列化。它将产生更小的文件和更快的读/写时间,代价是Python之外的可读性和可移植性

写:

import pickle # or cPickle

myList = [1, 2, 3, 4]

with open('data.txt', 'w') as f:
    pickle.dump(myList, f)
全文如下:

import pickle

with open('data.txt', 'w') as f:
    myList = pickle.load(f)

文件是否必须是可编辑和/或可读的?是。它需要人工编辑和可读。对于选项文件,这通常被证明是一种好方法。我的文件包含多个数据结构。那么如何使用“pickle”?您可以制作多个pickle,也可以将所有数据结构捆绑在某种结构中,如元组、列表、dict或对象,具体取决于您的应用程序。
import pickle # or cPickle

myList = [1, 2, 3, 4]

with open('data.txt', 'w') as f:
    pickle.dump(myList, f)
import pickle

with open('data.txt', 'w') as f:
    myList = pickle.load(f)