Python 从文本文件中加载包含列表的列表

8

我希望能从文本文件中加载列表嵌套列表。我查看了许多示例,但没有找到解决方案。这就是我想做的事情。我是Python的新手。

def main()
    mainlist = [[]]
    infile = open('listtxt.txt','r')
    for line in infile:
        mainlist.append(line)

    infile.close()

    print mainlist

`[[],['abc','def', 1],['ghi','jkl',2]]`

然而我想要的是像这样的东西。
[['abc','def',1],['ghi','jkl',2]]

我的列表包含:

'abc','def',1
'ghi','jkl',2
'mno','pqr',3

我希望的是,当我访问列表时, print mainlist[0] 能够返回正确的结果。

'abc','def',1

非常感谢您的帮助。

谢谢。


对于您期望的输出:[['abc','def',1],['ghi','jkl',2]]print mainlist [0]将返回['abc','def',1] - Ashwini Chaudhary
一切都很好,你只是多了一个括号来开始你的主列表!将 mainlist = [[]] 更改为 mainlist = [],然后 print mainlist[0] 将返回 ['abc','def',1] - Ryan Saxe
7个回答

15

我觉得你可以这样做:

from ast import literal_eval
with open('listtxt.txt') as f:
    mainlist = [list(literal_eval(line)) for line in f]

这是确保元素类型被保留的最简单方法。例如,像这样的一行:

"foo","bar",3

将被转换为2个字符串和一个整数。当然,这些行本身需要格式化为Python元组... 这可能不是最的方法,因为它具有通用性和简单性。


这就是了,上面的脚本起作用了。按照我想要的方式,这是完美的,非常感谢。 顺便说一句,使用C#或Delphi等语言中的数组也可以很快地完成同样的事情。 - user2330294

5
也许是这样的。
mainlist = []
infile = open('listtxt.txt','r')
for line in infile:
    mainlist.append(line.strip().split(','))

infile.close()

print mainlist

以上代码的输出为 ["'abc','def',1", "'ghi','jkl',2", "'mno','pqr',3"]。 - user2330294
不是的,split返回一个列表。infile = ["'abc','def',1","'ghi','jkl',2","'mno','pqr',3"] 我试过了,输出是[["'abc'","'def'",'1'],["'ghi'","'jkl'",'2'],["'mno'","'pqr'",'3']]。 - marcadian

2

您正在使用空列表作为第一个元素来初始化mainlist,而不是作为空列表本身。请将以下代码进行更改:

mainlist = [[]]

为了

mainlist = []

有趣的是,当我手动创建列表时,一切都正常工作。 def main(): mainlist = [['abc','def',1],['ghi','jkl',2]]print mainlist[0][0] 输出为'abc'但是,当我从文本文件中加载列表时,为什么不会发生同样的事情呢? 看来我错过了某些要点。 - user2330294

2
我会尝试这样做:

我会尝试类似以下的方法:

with open('listtxt.txt', 'r') as f:
    mainlist = [line for line in f]

以上代码的输出为:["'abc','def',1","'ghi','jkl',2","'mno','pqr',3"],为什么会有双引号呢? - user2330294
@user2330294,您的输入包含字符串的引号。 - Daenyth

1
mainlist = []
infile = open('filelist.txt', 'r')
for line in infile:
    line = line.replace('\n', '').replace('[', '').replace(']', '').replace("'", "").replace(' ', '')
    mainlist.append(line.split(','))
infile.close()

1
您可以像下面这样使用json模块(Python 3.x):
import json

def main()
    mainlist = [[]]
    infile = open('listtxt.txt','r')

    data = json.loads(infile.read())

    mainlist.append(data)

    infile.close()

    print(mainlist)

>>> [[],['abc','def', 1],['ghi','jkl',2]]

您的“listtxt.txt”文件应该如下所示:

[["abc","def", 1],["ghi","jkl",2]]

要导出您的列表,请执行以下操作:

def export():
        with open("listtxt.txt", 'w') as export_file:
             json.dump(mainlist, export_file)

JSON 模块可以加载列表,在 这里 找到。

0
我有一个姓氏列表 - 每行一个 - 存储在一个文本文件中,我想将其读入一个列表中。以下是我的做法(记得去掉换行符)。
surnames = [name.strip("\n") for name in open("surnames.txt", "r")]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接