Попытка запросить данные в CSV с помощью Python не удалась - PullRequest
0 голосов
/ 29 июня 2019

Я работаю с файлом CSV, в котором мне нужно удалить некоторые данные по атрибутам. В коде я успешно исключаю val [0] AK из записи в мой файл. Однако мне нужно запросить val [2], если он меньше 200 гектаров.

Я не получаю сообщение об ошибке с этим кодом, но он не запрашивает гектаров.

Я изменил свой код несколькими различными способами - я новичок в этом. Ранее я получал сообщения об ошибках, такие как не могу преобразовать строку в число с плавающей запятой .... после возни с этим я больше не получаю никаких сообщений об ошибках - но не получаю необходимые результаты.

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 голосов
/ 29 июня 2019

сначала вы забыли создать 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...