[英](Python) ValueError: invalid literal for int() with base 10: ''
[英]ValueError: invalid literal for int() with base 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网格文件,为no_data值分配了-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']
的数组
map()的工作方式是将函数(在我们的情况下为int())应用于可迭代对象(在我们的情况下,x是字符串)中的每个项目,并返回结果列表。 这里的错误是假定map将遍历数组,但是它遍历了存储在x中的字符串,原因是
for x in array
当您尝试将int()应用于字符“-”时,将发生错误。
只需使用
map(int, array)
并准备解析嵌套列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.