2015-06-30 32 views
1

我正在運行由其他人給我的腳本,但我不斷收到以下錯誤:ValueError:int()與基數爲10的無效文字:'1 t20.1103 t17.00 n'

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

這個錯誤來自這部分代碼:

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]) 

凡altlat從.txt文件中讀取:

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

lat_alt_hainain .TXT看起來是這樣的:

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 

等等

所以第一列使用INT,另外兩個使用FLOAT調用。這是錯誤出現的地方。腳本的創建者告訴我,將excel中的.txt文件格式化爲數字格式,之後錯誤消失,但是我已經完成了這一步,錯誤仍然存​​在。然後我想這可能是因爲.txt文件使用'。'作爲小數點分隔符,而我的電腦使用',',但我改變了這一點,錯誤仍然出現。你知道任何其他方式來準備.txt文件以供Python讀取嗎?

謝謝!

+0

tminM和tmaxM定義在哪裏? –

+0

它不會在int或float下面,所以打印這個錯誤 – The6thSense

回答

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]) 
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爲以下結構(分號作爲列分隔符,點作爲小數分隔符):

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 
相關問題