Привет, я совершенно новичок в Python.
(я просматривал посты, в которых немного борюсь с дислексией и испытываю трудности с пониманием решений) - извините, если что-то пропустил
Мне нужно иметь возможность фильтровать большой CSV-файл по значению. Я могу открыть файл и прочитать данные, используя средство чтения словаря, но борясь с частью фильтра. Я пытался заставить это работать только с лямбда-функцией, используя команду фильтра python (но не мог заставить ее работать), а затем попытался создать функцию фильтра, но изо всех сил пытался заставить это работать. Я включил небольшой пример формата файла данных CSV, и если кто-нибудь может помочь мне понять, как заставить эту фильтрацию по значению работать с этим файлом примера, я могу изменить код для файла большего размера. Так, например, чтобы отфильтровать файл CSV для всех строк с «синим» (значение), используя ключ (Name5). Любая помощь, пожалуйста?
#start of program
import csv
#function below intended to iterate over key value pairs in csv file
# after read in by dictionary reader
def filter_the_dict(dictObj, callback):
newDict = dict()
# Iterate over all the items in dictionary
for (key, value) in dictObj.items():
if callback((key, value)):
newDict[key] = value
return newDict
#end of function call
# code below opens csv file using dictionary reader using headers as keys and
# rows underneath as pairs. Later I want to be able to filter for column or rows
with open('Test_colours_in.csv', 'r') as csv_file:
csv_reader = csv.DictReader(csv_file)
with open('Test_colours_out.csv', 'w') as new_file:
fieldnames = ['Name1', 'Name2', 'Name3', 'Name4', 'Name5', 'Name6', 'Name7', 'Name8']
csv_writer = csv.DictWriter(new_file, fieldnames=fieldnames)
csv_writer.writeheader()
for line in csv_reader:
del line['Roll']
newDict = filter_the_dict(csv_reader, lambda x: x[5] == 'Blue')
print(newDict)
csv_writer.writerow(newDict)
#****************************************
csv example file
Name1,Name2,Name3,Name4,Name5,Name6,Name7,Name8
1,2,3,4,Red,6,7,8
1,2,3,4,Blue,6,7,8
1,2,3,4,Blue,6,7,8
1,2,3,4,Blue,6,7,8
1,2,3,4,Red,6,7,8
1,2,3,4,Red,6,7,8
1,2,3,4,Green,6,7,8
1,2,3,4,Green,6,7,8
1,2,3,4,Green,6,7,8
1,2,3,4,Green,6,7,8