2011-05-31 430 views
1

我有一個包含數字矩陣的文本文件閱讀:從文本文件蟒蛇

999 999 10 8 
3 4 999 999 999 
6 999 2 7 999 
999 6 3 5 6 
999 9 1 10 999 
10 6 999 2 2 999 

我想讀的每一行,並將其存儲在Python的數組,但 我有將每個值從string更改爲int時遇到問題。我在解析每行時嘗試使用int(),但我得到了無法將list傳入int()參數的錯誤。

+2

添加代碼的樣本。 – monkut 2011-05-31 02:46:54

回答

3

嘗試:

matrix = [[int(i) for i in line.split()] for line in open('myfile.txt')] 

[編輯] 如果你不想在第一線做之前閱讀。

with open('myfile') as f: 
    f.readline() 
    matrix = .... 
+2

readlines是不必要的。 – 2011-05-31 02:50:26

+0

是的,這似乎工作良好,但我Forogot提及我不想讀的txt文件的第一行,任何想法? – NewbieCoder 2011-05-31 02:53:28

+0

@Rafe凱特勒確實 – JBernardo 2011-05-31 02:54:13

-1
nums = [] 
with open('file.txt') as f: 
    for line in f: 
     nums.append([int(n) for n in line.split()]) 

你可以寫爲一個列表理解,但這種情況可能變得骯髒。

+3

列表理解爲什麼能拿討厭下面列出灰色複選標記接受? – 2011-05-31 02:51:15

+0

@Mike看到其他答案。嵌套列表理解很少是很好的形式;上面的那個可能是最簡潔的,但它太長和密集。 – 2011-05-31 02:52:28

+1

列表解析速度快且不太冗長。如果在理解中打開,CPython的gc會關閉該文件。 – JBernardo 2011-05-31 02:59:55

0

對於每一行,分割空間的字符,然後每個令牌轉換爲int。一種方式做到這一點,使用列表理解,就是:

s = "999 999 10 8" 
[int(t) for t in s.split(" ")] 
#evaluates to [999, 999, 10, 8] 
+2

考慮換行時不起作用。 – 2011-05-31 02:52:29

+1

分每默認 – 2011-05-31 08:25:00

2

使用map()得到listlist S:

>>> with open('myfile.txt') as matrix: 
...  [map(int, line.split()) for line in matrix] 
... 
[[999, 999, 10, 8], [3, 4, 999, 999, 999], [6, 999, 2, 7, 999], [999, 6, 3, 5, 6], [999, 9, 1, 10, 999], [10, 6, 999, 2, 2, 999]] 
+1

空格分割爲什麼'map'在列表解析裏,如果'map'做同樣的事情'[F(X)爲X的迭代]'? – JBernardo 2011-05-31 03:05:24

+1

@JBernardo,'map()'消除了你在答案中使用的內部for循環 – 2011-05-31 03:10:39