У меня следующая проблема. У меня есть файлы .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, которые находятся в моей другой таблице. Я не понимаю, как это сделать. Кто-нибудь может помочь пожалуйста?
Ваш исходный код читает файл 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'}
Независимо от того. Нашел свою ошибку. Мне нужно преобразовать CodeVariable
в строку
извините, я просто проверяю ТАК после того, как что-нибудь поесть. я так понимаю, код работает на вас? пожалуйста, примите ответ, если это так.
Я попробовал этот метод, так как он был для меня самым легким для понимания. Однако теперь один вопрос. Мой второй набор данных выглядит так:
Code = {3443, 3432, 4953, 3948}
, и каждый код имеетarea = {344.23, 5468.23, 2458, 52.9859}
. Когда я хочу добавить область, моей целью было:areas[Codevariable]=areas[Codevariable]+AreaValue
, гдеAreaValue
- это просто временное значение, которое загружает значение из предыдущего списка. Почему тогда это не работает?