我正在迭代一个较大的csv文件并根据该较大的csv文件的userIds收集数据。让我们将此文件称为file_A
。在此过程的中间,我的机器崩溃了。但是现在我想重新开始该过程,但只想继续进行我收集到的最后一条记录:
我编写了一个简单的方法来获取结果文件的最后一行:
def get_last_row(csv_file):
with open(csv_file, 'rb') as f:
reader = csv.reader(f)
lastLine = reader.next()
for line in reader:
lastLine = line
return lastLine
现在,我想通过评估结果文件来遍历line_return之外的file_A。我怎样才能做到这一点?
for row in input_file:
if row != lastLine[user_id]
make a database call
这是错误的,因为它将考虑除lastLine以外的所有行。
让我们假设这个例子
1,a
2,b
3,c
4,d
让我们假设lastLine['user_id']
是3
,我要继续从4开始从记录开始
您有两种方法可以做到这一点。首先是使用条件变量并在每个操作上对其进行测试=>产生很少重复的干净且易于维护的代码:
假设您当前的代码如下所示:
with open(csv_file, 'rb') as f:
reader = csv.reader(f)
# optional initialization ...
for line in reader:
# process line
您只需:
skip = True
with open(csv_file, 'rb') as f:
reader = csv.reader(f)
# optional initialization ...
for line in reader:
if skip:
line[user_id] = last_line_user_id
skip = False
else:
# process line
另外,您可以选择将一个第一个循环分开以从实际的行处理中跳过已处理的行:
with open(csv_file, 'rb') as f:
reader = csv.reader(f)
# optional initialization ...
for line in reader:
if line[user_id] == last_line_user_id:
break
for line in reader:
# process line
您重复了循环代码,但是在处理部分没有测试
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句