我正在读取存储在dict中的csv n中的数据... colName:Value ... format ... 但是cols的顺序变得混乱.. 我想要与csv
的顺序相同代码:
def sort_csv():
data = list(csv.DictReader(open("Bl.csv")))
op = open("Bl_S.csv", "wb")
wr = csv.writer(op, quoting=csv.QUOTE_NONE)
sorted_data = sorted(data, key = lambda d:(d['ID'], d['Begin']))
headers = sorted_data[0].keys()
wr.writerow(headers)
for i in sorted_data:
wr.writerow(i.values())
op.close()
答案 0 :(得分:1)
字典不是订购的,所以当你这样做时:
headers = sorted_data[0].keys()
headers
的顺序基本上是随机的。此外,values()
的返回值也是随机的,因此即使您很幸运,并且在使用以下内容编写行时headers
的顺序正确:
wr.writerow(i.values())
不同行中的元素不必具有相同的顺序。
您必须单独阅读文件中的标题。在你的情况下使用DictWriter
可能更好。例如:
with open('Block.csv') as infile, open('Block_sorted.csv', 'wb') as op:
data = sorted(csv.DictReader(infile), key=lambda d: (d['Track_ID'], d['Kp_Begin']))
# read the column names in the correct order.
infile.seek(0)
headers = infile.readline().split()
wr = csv.DictWriter(op, headers, quoting=csv.QUOTE_NONE)
wr.writeheader()
wr.writerows(data)
# don't need to close() files when using "with"