繁体   English   中英

ValueError:int()以10为底的无效文字:“-”(Python)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM