0

我有一个名为“test.txt”的文本文件,其中包含这种格式的行。

a|b|c|d
a1|b1|c1|d1
a2|b2|c2|d2
a3|b3|c3|d3

我的意图是从该文件中读取并给出一个列表列表。结果将是这样的。

[[a,b,c,d],[a1,b1,c1,d1],[a2,b2,c2,d2],[a3,b3,c3,d3]]

我试过这样:

myfile=open('test.txt','r')
x=myfile.readlines()
mylist=[]
mylist2=[]
mylist3=[]

for i in range(len(x)):   
   mylist.append(x[i])

for i in range(len(mylist)):
    mylist2.append(mylist[i].strip())
    mylist3.append(mylist2[i].split('|'))
print mylist3

即使我的代码工作没有任何问题,我想知道是否有更好的方法(最好更短)来做到这一点?

4

2 回答 2

5

使用csv模块

import csv

with open('test.txt','rb') as myfile:
    mylist = list(csv.reader(myfile, delimiter='|'))

即使没有该模块,您也可以直接拆分行,而无需始终将结果存储在中间列表中:

with open('test.txt','r') as myfile:
    mylist = [line.strip().split('|') for line in myfile]

两个版本都导致:

>>> with open('test.txt','rb') as myfile:
...     mylist = list(csv.reader(myfile, delimiter='|'))
... 
>>> mylist
[['a', 'b', 'c', 'd'], ['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2'], ['a3', 'b3', 'c3', 'd3']]
>>> with open('test.txt','r') as myfile:
...     mylist = [line.strip().split('|') for line in myfile]
... 
>>> mylist
[['a', 'b', 'c', 'd'], ['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2'], ['a3', 'b3', 'c3', 'd3']]
于 2013-06-05T07:58:17.527 回答
5

您可以使用str.split和 a list comprehensionhere。

with open(test.txt) as f:                                                  
    lis = [line.strip().split('|') for line in f]
    print lis

输出:

[['a', 'b', 'c', 'd'], ['a1', 'b1', 'c1', 'd1'], ['a2', 'b2', 'c2', 'd2'], ['a3', 'b3', 'c3', 'd3']]
于 2013-06-05T07:58:44.143 回答