尝试使用Python失败以CSV格式查询数据

时间:2019-06-28 21:14:24

标签: python csv operators

我正在使用CSV文件,在该文件中我需要按属性消除一些数据。在代码中,我成功地消除了val [0] AK写入文件的过程。但是,如果小于200公顷,我需要查询val [2]。

我没有收到带有此代码的错误消息,但它没有查询出公顷数。

我已经以几种不同的方式调整了代码-我是新来的。我以前收到错误消息,例如无法将字符串转换为float ....解决了这个问题后,我不再收到任何错误消息-但没有得到所需的结果。

def write_files(lg_fire_data, combined):
        # Want the first header 
    with open(lg_fire_data[0], 'r') as first:
        combined.write(first.read())

    for i in range(1, len(lg_fire_data)):
        with open(lg_fire_data[i], 'r') as canada_vals:
            next(canada_vals, None)

            for val in canada_vals:
                if val[0] != 'AK':
                    combined.write(val)

            for val in canada_vals:
                val[2] = float(val[2])
                if val[2] >= 200:
                    combined.write(val)

我不再收到任何错误消息-但没有得到查询的数据。

我们非常感谢您的帮助...假设我认为这应该很简单。 :)

1 个答案:

答案 0 :(得分:0)

首先,您忘记创建带有文件句柄的csv.reader对象,因此您的第一个循环产生的是字符串而不是val[0]字符

然后,您将无法在迭代器上搜索两次,这是第二次使用该迭代器,并且第二个循环不执行任何操作。如果要执行2个循环,请将行的内容存储在list

import csv

for file in lg_fire_data:
    with open(file, 'r') as f:
        canada_vals = csv.reader(f,delimiter=',')  # not sure of your csv delimiter
        next(canada_vals, None)  # read title

        canada_vals = list(canada_vals)  # create a list, so you can loop twice
        # rest is okay
        for val in canada_vals:
            if val[0] != 'AK':
                combined.write(val)

        for val in canada_vals:
            val[2] = float(val[2])
            if val[2] >= 200:
                combined.write(val)