我有大量数据A .txt
文件,我正在尝试使用Pyhon
在list
中解析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