ValueError:无效文字为int()与基数10:' - '(Python)
我试图将数组转换为整数,它应该很容易。但我想出了这个错误:ValueError:无效文字为int()与基数10:' - '(Python)
Traceback (most recent call last):
File "C:\Users\Joao\Desktop\Box Count (ongoing).py", line 32, in <module>
pixels = [map(int, x) for x in array]
ValueError: invalid literal for int() with base 10: '-'
的问题是,我读的文件是一个ASCII格,对于一个无音值分配-9999号(它确实如此,因为在编辑这更容易瞄准)。所以我可以使用正则表达式将这个值更改为另一个值,但我不想,所以我想知道这只是我的代码中的一个缺口,或者如果我没有考虑这个问题。有人能指出一个解决方案吗?
代码:
im = open('input.txt', 'r')
imgx = 1452
imgy = 1916
array = []
with open("qqqf.txt", "r") as im:
for line in im:
array.append(line)
print array
pixels = [map(int, x) for x in array]
输入文件:
-9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 1 1 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999 -9999
你糊涂了与map
和列表理解
pixels = [map(int, x) for x in array]
在这里,您采取的array
每一个元素,将其命名为x
和然后应用功能int
到每个元素在x
。但是x
是一个字符串,它的元素是字符,所以你最终将函数int
到'-'
,然后'9'
,然后'9'
等一个...
你想要做的可能只是什么
pixels = map(int, array)
此外,如果你的文件的每一行多个号码,你应该改变
array.append(line)
为
array.append(line.split())
或者,你将最终获得一个数组看起来像['-999 -999 -999', '-999 -999 -999']
击败我哈哈。你的答案更完整。 – Phoenios 2014-10-27 16:25:09
的方式映射()的工作原理是,它适用的功能(在我们的例子INT())在一个迭代对象的每个项目(在我们的大小写,x是一个字符串)并返回结果列表。这里的错误是假设地图将遍历数组了,但它的迭代,因为
for x in array
当您尝试应用INT()的字符,则会出现错误了存放在X不是字符串,“ - ” 。
只需使用
map(int, array)
,并准备分析一个嵌套列表。
您的代码需要每行都是一个整数。如果你在同一行上有所有的整数,你需要使用split()把它分解成一个数组,然后遍历它们。 – Barmar 2014-10-27 16:19:41
确实-9999代表一个负数或正数 - - 在前面 – 2014-10-27 16:20:26