结合Ignacio Vazquez-Abram和Tiina所给出的答案:
fieldnames = [ 'id', 'path', 'title', 'date', 'author', 'platform', 'type', 'port' ]
items = ('id', 'path', 'title', 'date', 'author', 'platform', 'type', 'port')
with open('unsorted.csv',newline='') as csvfile:
spamreader = csv.DictReader(csvfile, delimiter=";")
import operator
sortedlist = sorted(reader, key=operator.itemgetter(*items), reverse=True)
with open('sorted.csv', 'w') as f:
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()
for row in sortedlist:
writer.writerow(row)
通过这个,你可以
1-按多列排序行。
2-更改要按行排序的列数,而无需使用lambda表达式。
sortedlist = sorted(spamreader, key=lambda row:(row['column_1'],row['column_2']), reverse=False)
特别是,未来如果您想按不同的列顺序对其他CSV文件进行排序,而无需在lambda表达式中添加和删除列模式。
例如:
items = ('path', 'title')
items = ('id', 'path', 'title', 'date')
items = ('author', 'date', 'title')
替代
sortedlist = sorted(spamreader, key=lambda row:(row['column_2'],row['column_3']), reverse=False)
sortedlist = sorted(spamreader, key=lambda row:(row['column_1'],row['column_2'],,row['column_3'],row['column_4']), reverse=False)
sortedlist = sorted(spamreader, key=lambda row:(row['column_5'],row['column_4'],row['column_3']), reverse=False)