Я новичок в python и застрял в этом проекте на несколько дней, если кто-нибудь может помочь, спасибо.
Я пытаюсь записать в несколько выходных файлов, каждый выходной файл содержит результаты фильтра из одного исходного входного файла. Я поместил операторы print в строку ниже фильтра, чтобы показать мне, что «элемент» передается в оператор, и это происходит, но всякий раз, когда я просматриваю выходной файл, все, что содержится, это заголовки. Так, например, уникальный список из столбца 5 в CSV-файле красный, синий, зеленый. Выходной файл создается, связанный с каждым цветом, но его содержимое всегда пустое.
Выходные данные должны быть, когда элемент = синий Имя1, Имя2, Имя3, Имя4, Имя5, Имя6, Имя7, Имя8 1,2 , 3,4, Синий, 6,7,8 1,2,3,4, Синий, 6,7,8 1,2,3,4, Синий, 6,7,8
Вывод должен быть, когда элемент = красный 1,2,3,4, красный, 6,7,8 1,2,3,4, красный, 6,7,8 1,2,3,4, красный, 6,7 , 8
Вывод должен быть, когда элемент = зеленый
1,2,3,4, зеленый, 6,7,8
Программа ниже
import csv
# opens a the input file and reads in the data
with open('Test_colours_in.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file)
# prints list of unique values in column 5 of csv of input file
my_list = set()
for line in csv_reader:
my_list.add(line['Name5'])
print(my_list)
# takes these unique values and creates files associated with each unique value
for item in my_list:
with open(item + '_'+'Test.csv', 'w', newline='') as new_file:
fieldnames = ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8']
csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames)
csv_writer.writeheader()
# filters the original file for each item in the list of unique values and writes them to respective file
filtered = filter(lambda r: r['Name5'] == item, csv_reader)
for row in filtered:
csv_writer.writerow(row)
входной файл CSV
Имя1, Имя2, Имя3, Имя4, Имя5, Имя6, Имя7, Имя7, Имя8 1,2,3,4, Красный, 6,7,8 1,2,3,4, Синий, 6, 7,8 1,2,3,4, синий, 6,7,8 1,2,3,4, синий, 6,7,8 1,2,3,4, красный, 6,7,8 1, 2,3,4, красный, 6,7,8 1,2,3,4, зеленый, 6,7,8