python csv文件和for循环

时间:2016-11-11 16:21:04

标签: python loops csv for-loop

第一次来电...

出于某种原因,我没有从我的" for"中得到所需的结果。循环。下面是代码片段。循环第一次完美地工作,因为LOOP 2实际上返回到LOOP 1.但第二次通过LOOP 2不执行。我在25年内没有编写代码,但却热爱Python。只需要通过一些初步的试验和错误。提前感谢任何可以就此主题提供建议的人。

import csv

filename='cookie_data.csv'
lookup_filename='ip_addresses.csv'

with open(filename) as file_object, open(lookup_filename) as lookup_file_object:

    reader=csv.DictReader(file_object)
    l_reader=csv.DictReader(lookup_file_object)

    for row in reader:
        user_ip=row['ip_address']
        print("LOOP 1 " + user_ip)

        for l_row in l_reader:
            lookup_ip=l_row['lookup_ip']
            print("LOOP 2 " + user_ip + lookup_ip)

输出如下: 循环1 99.246.228.140 循环2 99.246.228.140 循环2 137.104.238.184 循环2 137.104.238.184 循环2 99.246.228.140 第2卷81.182.15.119 循环1 137.104.238.184 循环1 137.104.238.184 第1卷74.110.238.103

我打算每次通过循环测试字符串(ip地址)的匹配。第一个循环很好,然后第二个循环不执行循环2.

1 个答案:

答案 0 :(得分:0)

问题在于您的读者已附加到流中。因此,您只需要迭代一次。下次迭代时,它已经在文件末尾,所以它没有找到任何其他内容(因此“第二个循环不执行”)。

您可以通过seek每次完成文件对象时将其修复为开头:

import os

for row in reader:
    user_ip=row['ip_address']
    print("LOOP 1 " + user_ip)

    for l_row in l_reader:
        lookup_ip=l_row['lookup_ip']
        print("LOOP 2 " + user_ip + lookup_ip)

    # I prefer to explicitly say where we're seeking from, though I 
    # could have just left it as seek(0).
    lookup_file_object.seek(0, os.SEEK_SET)