2014-10-27 127 views
-1

我试图将数组转换为整数,它应该很容易。但我想出了这个错误: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 
+0

您的代码需要每行都是一个整数。如果你在同一行上有所有的整数,你需要使用split()把它分解成一个数组,然后遍历它们。 – Barmar 2014-10-27 16:19:41

+0

确实-9999代表一个负数或正数 - - 在前面 – 2014-10-27 16:20:26

回答

3

你糊涂了与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']

+0

击败我哈哈。你的答案更完整。 – Phoenios 2014-10-27 16:25:09

0

的方式映射()的工作原理是,它适用的功能(在我们的例子INT())在一个迭代对象的每个项目(在我们的大小写,x是一个字符串)并返回结果列表。这里的错误是假设地图将遍历数组了,但它的迭代,因为

for x in array 

当您尝试应用INT()的字符,则会出现错误了存放在X不是字符串,“ - ” 。

只需使用

map(int, array) 

,并准备分析一个嵌套列表。

相关问题