从python文本文件中读取

从python文本文件中读取,python,parsing,Python,Parsing,我有一个包含数字矩阵的文本文件: 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中的数组中,但是 我无法将每个值从字符串更改为int。在解析每一行时,我尝试使用int(),但我得到的错误是无法将list传递到int()参数中。尝试: matrix = [[int(i) for i in line.split()] for

我有一个包含数字矩阵的文本文件:

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中的数组中,但是 我无法将每个值从
字符串更改为
int
。在解析每一行时,我尝试使用
int()
,但我得到的错误是无法将
list
传递到int()参数中。

尝试:

matrix = [[int(i) for i in line.split()] for line in open('myfile.txt')]
[编辑] 如果你不想看第一行,就先读一读

with open('myfile') as f:
    f.readline()
    matrix = ....
试试看:

matrix = [[int(i) for i in line.split()] for line in open('myfile.txt')]
[编辑] 如果你不想看第一行,就先读一读

with open('myfile') as f:
    f.readline()
    matrix = ....
你可以把它作为一个列表来写,但这可能会让人讨厌


您可以将其写为一个列表理解,但这可能会很糟糕。

对于每一行,按空格字符拆分,然后将每个标记转换为整数。使用列表理解的一种方法是:

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

对于每一行,按空格字符拆分,然后将每个标记转换为整数。使用列表理解的一种方法是:

s = "999 999 10 8"
[int(t) for t in s.split(" ")]
#evaluates to [999, 999, 10, 8]
用于获取
列表
列表

>>> 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]]
用于获取
列表
列表

>>> 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]]

添加代码示例。添加代码示例。为什么列表理解会变得糟糕?@Mike看到了另一个答案。嵌套列表理解很少是好的形式;上面的一个可能是最简洁的,但它太长太密集了。列表理解速度快,不太冗长。如果在理解中打开,CPython的gc会关闭文件。为什么列表理解会变得糟糕?@Mike看到了另一个答案。嵌套列表理解很少是好的形式;上面的一个可能是最简洁的,但它太长太密集了。列表理解速度快,不太冗长。CPython的gc在理解中打开时关闭文件。是的,这似乎很有效,但我不想提及我不想阅读txt文件的第一行,有什么想法吗?@JJc,请接受任何有用的答案。。。您可以通过点击答案下方的灰色勾选符号接受投票箭头这似乎很有效,但我不想提及我不想阅读txt文件的第一行,有什么想法吗?@JJc,请接受任何有用的答案。。。如果
map
执行与
[f(x)for x in iterable]
?@JBernardo,
map()相同的操作,您可以通过单击列表理解中答案投票箭头下方的灰色勾选符号why
map
接受
消除了在回答中使用的
循环的内部
,如果
map
[f(x)for x in iterable]
?@JBernardo,
map()
消除了应答器内部使用的内部
循环,即按默认值拆分空格按默认值拆分空格按默认值拆分空格