1
rows = []
FILE = open("testing.txt", "r")
for blob in FILE: rows.append([int(i) for i in blob.split(" ")])

这里 testing.txt 包含

01 23 04   05 67
08 09 10
11
12

但是当我运行代码时,我收到以下错误:

ValueError                                Traceback (most recent call last)
<ipython-input-1-2086c8bf9ab4> in <module>()
      1 rows = []
      2 FILE = open("testing.txt", "r")
----> 3 for blob in FILE: rows.append([int(i) for i in blob.split(" ")])

ValueError: invalid literal for int() with base 10: ''

所以我的问题是:int() 有什么问题?我认为如果参数是整数(int(5) == 5例如),那是完全可以的。谢谢你。

4

4 回答 4

2

如前所述,问题在于换行符。

我建议使用split()而不是split(" "). 这会将所有空格视为分隔符,包括换行符。因此,您将避免调用int()on \n

于 2013-05-25T16:36:53.707 回答
1

显然你的 testing.txt 最后有换行代码。添加if列表理解:

for blob in FILE:
    rows.append([int(i) for i in blob.split(" ") if i.isdigit()])
于 2013-05-25T16:32:56.977 回答
0

您可以将所有内容放入可读的单行中:

with open('testing.txt') as fobj:
    rows = [[int(item) for item in row.split()] for row in fobj if row.strip()]

with将保证在您离开上下文后,即在您退出后,文件将被关闭。顺便说一句,split()不带参数专门用于拆分文件中的行,因为它会在所有空白字符处拆分:' \t\r\n\v\f'. 为避免空行检查是否row.strip()为真而出现空列表。

于 2013-05-25T17:43:14.217 回答
0

我想我会这样写你的代码:

with open('testing.txt','r') as f:
    data=[[int(n) for n in line.strip().split()] for line in f]
于 2013-05-25T18:50:55.310 回答