ValueError:int()的基数为10的无效文字:'1 \ t20.1103 \ t17.00 \ n'

时间:2015-06-30 09:15:29

标签: python

我正在运行由其他人提供给我的脚本,但我不断收到以下错误:

public Main() {
   System.out.println("Inside Duplicate Main");
}

错误来自这部分代码:

line 144, in <module>
    ID=int(afields[0])
ValueError: invalid literal for int() with base 10: '1\t20.1103\t17.00\n'

从.txt文件中读取altlat的地方:

while altlat and tminM and tmaxM:
        afields=altlat.split(' ')
        tmifields=tminM.split(' ')
        tmxfields=tmaxM.split(' ')

    ID=int(afields[0])
    y= float(afields[1])
    z=float(afields[2])

lat_alt_hainain.txt看起来像这样:

ifh0=open(infilepath + '\\' + 'lat_alt_hainan.txt', "r")
zy_header_line=ifh0.readline()
altlat=ifh0.readline()

等...

所以使用INT调用第一列,使用FLOAT调用另外两列。这是出现错误的地方。该脚本的创建者告诉我,将.txt文件格式化为excel格式,之后错误消失,但我已经完成了这个并且错误仍然存​​在。然后我认为这可能是因为.txt文件使用'。'作为小数分隔符,虽然我的计算机使用',',但我改变了,但错误仍然出现。你知道准备一个.txt文件以供Python读取的其他方法吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

看起来你想要按所有空格分割,你应该使用 - string.split()而没有任何参数。

示例 -

while altlat and tminM and tmaxM:
        afields=altlat.split()
        tmifields=tminM.split(' ')
        tmxfields=tmaxM.split(' ')

    ID=int(afields[0])
    y= float(afields[1])
    z=float(afields[2])

答案 1 :(得分:0)

要解决您的问题,您需要按str.split()中所述使用this answer given拆分读取/导入的行。

但是我想展示一种替代方法,因为您提到您的数据来自Excel。

我建议使用Python的标准csv模块从文件中读取数据:

#!/usr/bin/env python
# coding: utf-8

import csv

with open('foo.csv') as csvfile:
    line = csv.reader(csvfile, delimiter=';')
    line.next() # skip header line
    for row in line:
        ID = int(row[0])
        lat = float(row[1])
        lon = float(row[2])

        print('ID: {}, Lat: {}, Lon: {}'.format(ID, lat, lon))

foo.csv为以下结构(分号为列分隔符,Dot为十进制分隔符):

POINTID;lat;alt
1;20.1103;17.00
2;20.0269;1.00
3;20.0269;16.00
4;20.0269;17.00
5;20.0269;5.00
6;20.0269;5.00