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

时间:2016-09-16 01:44:00

标签: python csv

尝试解析数据文件(如下所示),仅查找用户在特定日期之前开始的行。然后按升序(按开始日期)从这些行的单词列中排序值

id, name, start_date, role, end_date, words
657, mystical, 1351140260, cleaner, 1951140260, very lazy
1987, kanyau, 1451189768, watchman, 1539742445, sleeping

有人可以帮忙吗?

P.S:新手在这里,但这是我一直在玩的东西。

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)

1 个答案:

答案 0 :(得分:0)

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

previous_users.sort(key=lambda row: int(row['start_date']))

注意:将previous_users.keys()传递给DictWriter作为字段名称是错误的。一,您需要previous_users[0].keys()(在验证它是非空的之后),因为previous_userslist dict,而不是dict。其中两个dict没有定义的排序,因此您的输出列可能会重新排列。如果这不是问题,那就这样吧。但您可能希望以所需顺序明确传递字段名称,或者从DictReader以正确的顺序读取它们,例如csv.DictWriter(fou, infile.fieldnames)

附加拼写错误:大概你要比较int(row['start_date']) < dp;您需要转换为int,并且希望与dp中的值进行比较,而不是字符串"dp"