我想通过从文本文件中读取来构建一个列表或列表列表。
例如,我有一个文件“mylist.txt”说
mylist = [
1,
2,
3,
4]
myotherlist = [
[1, 3, 4, 5],
[3, 5, 3, 6]
]
我想阅读该文本文件,然后在我的 python 脚本中使用它。
那可能吗?我只是在 python 语法中使用了上面的示例。我的目标是避免自己编写解析逻辑。对于我的目的来说,XML 似乎太复杂了。
谢谢你。
我想通过从文本文件中读取来构建一个列表或列表列表。
例如,我有一个文件“mylist.txt”说
mylist = [
1,
2,
3,
4]
myotherlist = [
[1, 3, 4, 5],
[3, 5, 3, 6]
]
我想阅读该文本文件,然后在我的 python 脚本中使用它。
那可能吗?我只是在 python 语法中使用了上面的示例。我的目标是避免自己编写解析逻辑。对于我的目的来说,XML 似乎太复杂了。
谢谢你。
如果我有以下数据文件(data.txt):-
[1,2,3,4]
然后这段代码会将它读入一个列表。
from ast import literal_eval
with open('data.txt') as fsock:
mylist = literal_eval( fsock.read() )
这也适用于其他数据类型,例如字典。有关更多详细信息,请参阅literal_eval文档。
如果它是列表列表,那么您应该在 mylists.txt 文件中“直接”定义它。
例如
MYLISTS = [
[1, 2, 3],
[2, 3, 4],
...
]
并将 mylists.txt 重命名为 mylists.py。
然后,在同一目录中使用另一个 Python 脚本,您可以这样做
import mylists
for sublist in mylists.MYLIST:
for elem in sublist:
....
这不需要您解析代码,Python“数据”文件也很容易手动编辑。
如果您有 形式的东西[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
and之类的东西: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]
]
由于您似乎暗示将列表作为文本存储到文件中然后将其读回,因此草莓的ast
示例可能是最好的。但是如果你不熟悉它,我也将pickle
方法扔掉,这是一个二进制序列化。它将产生更小的文件和更快的读/写时间,但代价是 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)