我正在迭代大型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
现在我想通过评估结果文件来迭代超出行返回的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开始的记录
答案 0 :(得分:3)
你有两种方法可以做到这一点。首先是使用条件变量并在每个操作上测试它=>产生干净且易于维护的代码,几乎没有重复:
假设您当前的代码如下:
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
您复制了循环代码,但在处理部分中没有进行测试