Python 过滤CSV文件中的行,然后根据列对其进行排序

Python 过滤CSV文件中的行,然后根据列对其进行排序,python,csv,Python,Csv,试图解析数据文件(如下)以仅查找用户在某个日期之前开始的行。然后按升序(按开始日期)对这些行中“单词”列中的值进行排序 id、名称、开始日期、角色、结束日期、单词 657,神秘,1351140260,清洁,1951140260,很懒 1987年,kanyau,1451189768,看守,1539742445,睡眠 有人能帮忙吗 注:这里是新手,但这是我一直在玩的东西 date_pivot = "6/09/2010 00:00:00" d = datetime.strptime(date_piv

试图解析数据文件(如下)以仅查找用户在某个日期之前开始的行。然后按升序(按开始日期)对这些行中“单词”列中的值进行排序

id、名称、开始日期、角色、结束日期、单词
657,神秘,1351140260,清洁,1951140260,很懒
1987年,kanyau,1451189768,看守,1539742445,睡眠
有人能帮忙吗

注:这里是新手,但这是我一直在玩的东西

date_pivot = "6/09/2010 00:00:00"
d = datetime.strptime(date_pivot, "%d/%m/%Y %H:%M:%S")
date_pivot = time.mktime(d.timetuple())
dp = int(date_pivot)
infile = csv.DictReader(open("sample_data.csv","rb"), delimiter=",")
previous_users = [row for row in infile if row['start_date'] < 'dp']
#print previous_users
with open('final_test.csv','wb') as fou:
    dw = csv.DictWriter(fou, previous_users.keys())
    dw.writeheader()
    dw.writerow(my_dict)
date\u pivot=“2010年9月6日00:00:00”
d=datetime.strtime(日期轴,“%d/%m/%Y%H:%m:%S”)
date\u pivot=time.mktime(d.timetuple())
dp=int(日期轴)
infle=csv.DictReader(打开(“sample_data.csv”,“rb”),分隔符=“,”)
以前的用户=[如果行['start\u date']为填充中的行,则为行]<'dp']
#打印以前的用户
以open('final_test.csv','wb')作为fou:
dw=csv.DictWriter(fou,先前的用户.keys())
dw.writeheader()
dw.writerow(我的字典)

应该相当简单。由于需要键入convert并查找键函数,因此
lambda
最简单:

previous_users.sort(key=lambda row: int(row['start_date']))
注意:将
previous_users.keys()
传递给
DictWriter
,因为字段名是双重错误的。首先,您需要执行
以前的\u用户[0].keys()
(在验证它是否为非空之后),因为
以前的\u用户
dict
列表,而不是
dict
。第二,
dict
s没有定义的顺序,因此您的输出列可能会被重新排列。如果这不是问题,那就这样吧。但您可能希望以所需的顺序显式传递字段名,或从
DictReader
中以正确的顺序读取字段名,例如
csv.DictWriter(fou,infle.fieldnames)


其他输入错误注释:可能您想要比较
int(行['start_date'])
;您需要转换为
int
,并且要与
dp
中的值进行比较,而不是字符串
“dp”

。由于需要键入convert并查找键函数,因此
lambda
最简单:

previous_users.sort(key=lambda row: int(row['start_date']))
注意:将
previous_users.keys()
传递给
DictWriter
,因为字段名是双重错误的。首先,您需要执行
以前的\u用户[0].keys()
(在验证它是否为非空之后),因为
以前的\u用户
dict
列表,而不是
dict
。第二,
dict
s没有定义的顺序,因此您的输出列可能会被重新排列。如果这不是问题,那就这样吧。但您可能希望以所需的顺序显式传递字段名,或从
DictReader
中以正确的顺序读取字段名,例如
csv.DictWriter(fou,infle.fieldnames)


其他输入错误注释:可能您想要比较
int(行['start_date'])
;您需要转换为
int
,并且要与
dp
中的值进行比较,而不是字符串
“dp”

不清楚您所说的“…”是什么意思,然后从这些行中按升序(按开始日期)排列单词列中的值,因为单词列中的值没有开始日期(或者对所有行都是一样的)。请提问并解释您希望如何更好地排序/重新排序。不清楚您所说的“…,然后按升序(按开始日期)从这些行中排序单词列中的值”,因为单词列中的值没有开始日期(或者对所有人来说都是一样的)。请回答您的问题,并解释您希望如何更好地对事物进行排序/重新排序。