2014-01-20 61 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("'","")