2011-05-31 284 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