Импорт файла csv в качестве словаря в python для последующего вычисления площадных значений

У меня следующая проблема. У меня есть файлы .csv (180 записей), которые выглядят так:

Codes,Area
3443,0
3530,0
3583,0
3589,0
3514,0

Я прочитал этот .csv-файл в python с помощью этой команды:

input_file = csv.DictReader(open("CPC.csv"))
for row in input_file:
    print row

Тогда словарь будет выглядеть так:

{'Codes': '3443', 'Area': '0'}
{'Codes': '3530', 'Area': '0'}
{'Codes': '3583', 'Area': '0'}
{'Codes': '3589', 'Area': '0'}
{'Codes': '3514', 'Area': '0'}

Выглядит красиво, и мне это очень нравится. Моя цель - вычислить значения площади в м ^ 2 для каждого кода. Поэтому этот словарь является временным, чтобы суммировать все области для их конкретных кодов, а затем взять это значение и переназначить его в новую таблицу. Однако у меня есть проблема: как мне получить доступ к своим кодам? Поэтому я просто хотел иметь такой словарь:

{'3443', '0'}
{'3530', '0'}
{'3583', '0'}
{'3589', '0'}
{'3514', '0'}

Так что мне просто нужно найти свой код (например, 3443, и затем я могу добавить к 0, что есть мои 125 м ^ 2, которые находятся в моей другой таблице. Я не понимаю, как это сделать. Кто-нибудь может помочь пожалуйста?

0
0
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ваш исходный код читает файл csv, анализирует формат для разделения столбцов, а затем печатает каждую проанализированную строку. Он не хранит объекты в памяти.

Вы должны выбрать, хотите ли вы сохранить их все в памяти или обрабатывать их по ходу работы и сохранять результаты в другом месте, например, в другом файле.

Судя по описанию проблемы, вы будете разбираться с каждым кодом отдельно. Однако вы не предоставили свою «другую таблицу», поэтому я не знаю точно, как она устроена.

В приведенном ниже примере кода будет прочитан файл, код за кодом, и для каждого кода он будет искать в YOUR_OTHER_TABLE значение, которое нужно ввести в поле Area. Затем он запишет каждую строку в отдельный файл результатов.

Кроме того, похоже, что вы используете python 2, поэтому в приведенном ниже примере также используются особенности python 2 (например, открытие файлов csv в двоичном режиме, в python 3 вы этого не хотите):

with open("CPC.csv", 'rb') as f, open('CPC_result.csv', 'wb') as fw:
    csv_f = csv.DictReader(f)
    csv_w = csv.DictWriter(fw, csv_f.fieldnames)
    for row in csv_f:
        code = row['Codes']
        calculated_area = YOUR_OTHER_TABLE.get(code, 0)
        row['Area'] = str(calculated_area)
        csv_w.writerow(row)
Ответ принят как подходящий
areas = {}
input_file = csv.reader(open("CPC.csv"))
next(input_file)
for row in input_file:
    key, val = row
    areas[key] = val

print areas
#{'3443': '0', '3530': '0', '3583': '0', '3589': '0', '3514': '0'}

Я попробовал этот метод, так как он был для меня самым легким для понимания. Однако теперь один вопрос. Мой второй набор данных выглядит так: Code={3443, 3432, 4953, 3948}, и каждый код имеет area={344.23, 5468.23, 2458, 52.9859}. Когда я хочу добавить область, моей целью было: areas[Codevariable]=areas[Codevariable]+AreaValue, где AreaValue - это просто временное значение, которое загружает значение из предыдущего списка. Почему тогда это не работает?

Cliff 31.10.2018 16:07

Независимо от того. Нашел свою ошибку. Мне нужно преобразовать CodeVariable в строку

Cliff 31.10.2018 16:31

извините, я просто проверяю ТАК после того, как что-нибудь поесть. я так понимаю, код работает на вас? пожалуйста, примите ответ, если это так.

deadvoid 31.10.2018 17:08

Другие вопросы по теме