在Python中解析大量数据时,如何处理索引范围错误



我有大量数据A .txt文件,我正在尝试使用Pyhonlist中解析objects。数据结构在大多数情况下看起来像这样,而当数据结构确实如此,解析就成功了。

2315462;3/13/2015 8:00:00 AM;3/13/2015 1:00:00 PM
778241;1/3/2015 12:30:00 PM;1/3/2015 1:00:00 PM

如您所见,有一个ID,一个开始时间和结束时间。它使用此代码解析:

my_array_with_objects = []
with open("test.txt", newline='n') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
    my_array_with_objects.append(Employee(row[0], row[1], row[2]))

Employee是一个看起来像这样的课程:

class Employee:
def __init__(self, id, time_start, time_end):
    self.id = id
    self.time_start = time_start
    self.time_end = time_end

偶尔,数据中缺少time_end

276908;1/3/20152015 8:00:00 AM

此时,程序以index out of range异常崩溃。我是Python的新手,但听说没有null值之类的东西。那为什么崩溃呢?我以为可以用沿线的东西处理:

if row[2] is None:
    print("error, do things to fix")

...但没有触发。如何处理这些错误?如果缺少row[2],我不希望发生任何特别的事情。可以带一个空值。

您可以按照@torxed建议添加检查if len(row) < 3。一个更好的解决方案可能是重写Employee类并使用" Splat"操作员扩展行(列表)。对于缺少值,使用了一个空字符串''。

这还涵盖了start_time和end_time或所有3个值都缺少的情况。

class Employee:
    def __init__(self, id='', start_time='', end_time=''):
        self.id = id
        self.start_time = start_time
        self.end_time = end_time
        # check values and convert to int, datetime...
for row in reader:
    my_array_with_objects.append(Employee(*row))

如果要覆盖Missing Time_end,这应该可以解决:

for row in reader:
    try:
        my_array_with_objects.append(Employee(row[0], row[1], row[2]))
    except IndexError:
        my_array_with_objects.append(Employee(row[0], row[1], None))

您可以用默认值替换一个,也可以选择如何处理缺失字段,但是在block

之外想要

相关内容

  • 没有找到相关文章

最新更新