Python文件解析器-基数为10的int()的文本无效:“”
我正试图用这种格式解析一个文件Python文件解析器-基数为10的int()的文本无效:“”,python,string,parsing,type-conversion,integer,Python,String,Parsing,Type Conversion,Integer,我正试图用这种格式解析一个文件 2010-11-04 00:03:50.209589 M003 ON Sleeping begin 2010-11-04 00:03:57.399391 M003 OFF 2010-11-04 00:15:08.984841 T002 21.5 2010-11-04 00:30:19.185547 T003 21 2010-11-04 00:30:19.385336 T004 21 我需要选择第三列中的数字。选择行之后,我选择它的第三个字段。然后我将其拆分,选择
2010-11-04 00:03:50.209589 M003 ON Sleeping begin
2010-11-04 00:03:57.399391 M003 OFF
2010-11-04 00:15:08.984841 T002 21.5
2010-11-04 00:30:19.185547 T003 21
2010-11-04 00:30:19.385336 T004 21
我需要选择第三列中的数字。选择行之后,我选择它的第三个字段。然后我将其拆分,选择类型M或T,并选择第三个字段其余部分的数字。这里的问题是:当我尝试选择数字时,我得到以下错误:基数为10的int的文本无效:。我已经尝试过很多方法,比如删除EOF或num的任何类型的结束字符,但仍然存在这个问题
temp_sensors = 0 #total number of temperature sensors
f = open('data', 'r')#open the dataset
line = f.readline() #reading line
while line:
step = line.split()#dividing the line into different words
sensor_type = step[2][:1]
sensor_number = step[2][2:]
sensor_value = step[3]
#print(sensor_number)
#num = sensor_number[:2]
#print(type(num))
num = sensor_number.rstrip()
appoggio = int(num)
#print(type(num))
if sensor_type == "T":
if appoggio > temp_sensors:
temp_sensors = appoggio
line = f.readline()
print("NUMERO TEMP MAX: "+ str (temp_sensors))
要运行代码,需要一个包含多个传感器事件的txt文件data.txt,格式如前所示。我得到的错误是:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-b89fbf305c4a> in <module>
28 # print(type(num))
29 num = sensor_number.rstrip()
---> 30 appoggio = int(num)
31 #print(type(appoggio))
32 #print(type(num))
ValueError: invalid literal for int() with base 10: ''
我同意前面的发言者的观点,一行似乎使用了不同的格式。因此,空字符串在转换为整数时似乎会引发错误。我的建议是提前测试格式
import re
def readdata(fname):
ptrn = r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{6} [MT]\d{3} .*\s+$'
sensor_count = 0
with open(fname) as fp:
for i,line in enumerate(fp):
if not re.match(ptrn, line):
print(f'Illegal format in line {i}: {line!r}')
continue
dt,tm,sensor,value = line.rstrip().split(' ',3)
sensor_type,sensor_number = sensor[0],int(sensor[1:])
print(sensor_type, sensor_number)
if sensor_type == 'T':
sensor_count = max(sensor_count, sensor_number)
print(f'Number of temperature sensors: {sensor_count}')
请告诉我们错误发生在输入文件的哪一行。num似乎是一个空字符串-sensor_number的值是多少?是的,一开始我也这么认为,但我打印了您可以从注释中看到的所有内容。例如,在第一行中,变量假定:sensor_number=003,但它是字符串num=003。appoggio创建了错误。我认为这是因为当我在sensor_number中选择数字时,它在字符串的末尾添加了一个空格,这个空格不允许从整数转换为int,这就是我使用sensor_number.rstrip的原因。但是它似乎不起作用。请显示它崩溃的循环中的行和步的内容。您提供的数据将正常工作,因此您必须有更多格式稍有不同的数据。int会出现相同的错误-因此您尝试将空字符串转换为数字。使用print查看变量num和next中生成此值的检查命令,并使用print查看它使用的值,等等。这称为打印调试。可能您得到的数据与您预期的不同,它给出的num也与您预期的不同。@KenY-N您是对的。该文件有15万行,我无法自己检查所有行。我打印了1476694行,但表单上的行是错误的。有一行的格式是:2011-05-10 18:42:45.169231 c OFF。非常感谢。