在Python中解析大量数据时,如何处理索引超出范围错误?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Python中解析大量数据时,如何处理索引超出范围错误?相关的知识,希望对你有一定的参考价值。
我有一个.txt
文件的大量数据,我正在尝试使用objects
解析list
中的Pyhon
。大多数情况下,数据结构看起来都是这样,当它完成时,解析成功。
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='
') 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))
如果你想要覆盖缺少的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))
您可以使用默认值替换None,或者选择如何在except块中处理缺少的字段
以上是关于在Python中解析大量数据时,如何处理索引超出范围错误?的主要内容,如果未能解决你的问题,请参考以下文章
Assimp 和 D3D 模型加载:网格未在 D3D 中显示
elasticsearch vs solr 关于数据结构/查询功能
PostgreSQL 9.5.4数据库快速INSERT大量数据研究
列索引超出范围,3 > 2。嵌套异常是 java.sql.SQLException: