2014-01-20 27 views
2

我有一个txt文件是这样的:Python的读取文件到2D名单

1 3 4 
5 5 6 

,我想分析它的元素一个元组或相应的列表。到目前为止,我能够逐行读取文件中的行,但结果不是我想要的

ins = open("input.txt", "r") 
    array = [] 
    for line in ins: 
     line = line.rstrip('\n') 
     array.append(line) 
    ins.close() 
    print array 

但是打印阵列我得到

['1 3 4', '5 5 6'] 

我要的是

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

这有什么办法可以实现吗?

+1

这是什么都来用元组做? –

+1

''[1 3 4]'是什么意思?这不是一个有效的python表达式。你的意思是'[1,3,4]'? – Elisha

+0

是的,你是对的!这就是我要的。 – JmRag

回答

5

如果我理解你问正确,您正在寻找str对象的split方法。你可能也想使用int类型得到实际的数字,而不是字符串:

data = [] 
for line in ins: 
    number_strings = line.split() # Split the line on runs of whitespace 
    numbers = [int(n) for n in number_strings] # Convert to integers 
    data.append(numbers) # Add the "row" to your list. 
print(data) # [[1, 3, 4], [5, 5, 6]] 

下面这行做同样的事情,但在更紧凑,更符合Python时尚:

data = [[int(n) for n in line.split()] for line in ins] 

最后,如果你真的想使用元组而不是列表,只需要在内部列表中使用tuple类型:

data = [tuple(int(n) for n in line.split()) for line in ins] 
print(data) # [(1, 3, 4), (5, 5, 6)] 
4
with open("input.txt", "r") as file: 
    result = [[int(x) for x in line.split()] for line in file] 
1

一个班轮时间:

[line.split() for line in ins] 

如果要转换项目int随意这样做的:

[map(int, line.split()) for line in ins] 
+0

这根本没有读取文件 – tim

+0

@tim那么是什么?提问者阅读文件没有问题。 –

+0

这并不能证明缺乏完整的答案。添加另一行需要10秒钟,并避免混淆。 – tim

0

您可以使用嵌套列表理解:

txt='''\ 
1 3 4 
5 5 6''' 

print [[int(s) for s in line.split()] for line in txt.splitlines()] 
# [[1, 3, 4], [5, 5, 6]] 
0
with open('input.txt') as f: 
    data = [map(int, line.split()) for line in f] 

这是为了更详细或多或少相当于:

try: 
    f = open('input.txt', 'r') 
    data = [] 
    for line in f: 
     data.append([int(n) for n in line.split()]) 
finally: 
    f.close() 
0

这个作品

对于列表:

with open('yourfile.txt', 'r') as ins: 
    array = [[int(n) for n in line.split()] for line in ins] 

示例输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]] 

或元组:

with open('yourfile.txt', 'r') as ins: 
    myTuple = tuple(tuple(int(n) for n in line.split()) for line in ins) 

示例输出:

((1, 2, 3), (4, 5, 6), (7, 8, 9)) 

使用with意味着您的文件被打开仅针对块内的语句 ,然后自动关闭。这是一个很好的做法。

0

如果你真的想要的输出,你表现出来的,没有单引号和数字之间的逗号,你可以改变你的最后一行,print array,这样的:

print str(["[%s]"%item for item in array]).replace("'","")