【发布时间】:2020-03-28 23:36:01
【问题描述】:
您好,我是 Python 的新手。
(我看过一些帖子,我在阅读障碍和难以理解解决方案方面有些挣扎)——如果我遗漏了什么,非常抱歉
我需要能够按值过滤大型 csv 文件。我可以打开文件并使用字典阅读器读取数据,但在过滤器部分遇到了困难。我尝试使用 python filter 命令使其仅与 lambda 函数一起工作(但无法使其工作),因此尝试创建一个过滤器函数,但努力使其也能正常工作。 我已经包含了一个 csv 数据文件的小示例格式,如果有人可以帮助我了解如何通过值部分进行过滤以处理此示例文件,我可以更改更大文件的代码。 因此,例如,使用键 (Name5) 过滤 csv 文件中所有具有“蓝色”(值)的行。 请问有什么帮助吗?
#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
【问题讨论】: