从给定的行开始迭代csv文件?

时间:2014-11-07 21:11:49

标签: python csv

我正在迭代大型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开始的记录

1 个答案:

答案 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

您复制了循环代码,但在处理部分中没有进行测试