Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python文件解析器-基数为10的int()的文本无效:“”_Python_String_Parsing_Type Conversion_Integer - Fatal编程技术网

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。非常感谢。