#python
#python
Вопрос:
Я пишу скрипт для сравнения двух файлов csv. План состоит в том, чтобы скрипт находил элементы с одинаковым идентификатором и отправлял их в третий csv.
Для этого я использую вложенный цикл for . Он должен выбрать строку в первом файле, а затем сравнить ее с каждой строкой (по одной за раз) во втором. Пока все хорошо.
Скрипт должен повторять это для каждой строки в первом файле. Однако после некоторой отладки я обнаружил, что скрипт сравнивает только первую строку с каждой строкой во второй перед остановкой. Другие строки никогда не сравниваются.
Я не понимаю, почему, хоть убей. Я уже съеживаюсь на случай, если это окажется ошибкой школьника, но подумал, что стоит спросить сообщество.
Есть идеи?
outdata = []
newPrices = open(csv1)
oldPrices = open (csv2)
priceComparison = open (csv3)
new=csv.reader(newPrices, delimiter=',')
old=csv.reader(oldPrices, delimiter=',')
writer=csv.writer(priceComparison,delimiter=',')
for row1 in new:
print(row1[0])
for row2 in old:
print(row1[0]) #Seems to be sticking on the first value and not looping the first for loop
if row1[0].upper == row2[0]:
print("row: ", row)
outdata.append([row1])
outdata.append([row2])
print(outdata)
writer.writerows(outdata)
Комментарии:
1. Вам было бы лучше использовать фреймы данных pandas: меньше кода и быстрее.
Ответ №1:
Я не уверен на 100%, но я предполагаю, что csv.reader
возвращает итератор, который может быть использован только один раз. Следовательно, почему вы выполняете цикл только old
один раз. Попробуйте поместить строки в списки перед их обходом, например:
new = list(csv.reader(newPrices, delimiter=","))
old = list(csv.reader(oldPrices, delimiter=","))
Вот ссылка на документацию на случай, если это полезно: https://docs.python.org/3/library/csv.html#csv.reader
Комментарии:
1. На месте. Спасибо за быстрый ответ. Оказывается, что объекта writer также недостаточно. В конце мне пришлось использовать csv.DictWriter