繁体   English   中英

在Python中更改列顺序进行排序

[英]Sort in Python changing column order

我正在从存储在字典中的csv n中读取数据... colName:Value ...格式...但是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()

不对字典进行排序,因此当您执行以下操作时:

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM