如何通过python中的两列对csv文件进行排序?

拉拉

我有一个包含6列的csv文件。

我想按第2列然后按第3列对其进行排序。

我当前的代码正在创建一个空白文件:

import csv
with open('original.csv', mode='rt') as f, open('sorted.csv', 'w') as final:
        writer = csv.writer(final, delimiter='\t')
        reader = csv.reader(f, delimiter=',')
        _ = next(reader)
        sorted1 = sorted(reader, key=lambda row: int(row[1]))
        sorted2 = sorted(reader, key=lambda row: int(row[2]))
        for row in sorted2:
            writer.writerow(row)

我究竟做错了什么?

2号环

您的输出文件为空的原因是

sorted2 = sorted(reader, key=lambda row: int(row[2]))

正在尝试从中对数据进行排序reader,但是您已经读取了前一个排序语句中的所有数据,因此读者没有任何剩余要读取的内容。但是,你真的希望重新排序从数据reader,你要重新排序的数据sorted1,如下所示:

import csv

with open('original.csv', mode='rt') as f, open('sorted.csv', 'w') as final:
    writer = csv.writer(final, delimiter='\t')
    reader = csv.reader(f, delimiter=',')
    _ = next(reader)
    sorted1 = sorted(reader, key=lambda row: int(row[1]))
    sorted2 = sorted(sorted1, key=lambda row: int(row[2]))
    for row in sorted2:
        writer.writerow(row)

OTOH,无需分两次进行排序。您可以通过更改键功能一次完成此操作。

import csv

with open('original.csv', mode='rt') as f, open('sorted.csv', 'w') as final:
    writer = csv.writer(final, delimiter='\t')
    reader = csv.reader(f, delimiter=',')
    _ = next(reader)
    sorted2 = sorted(reader, key=lambda row: (int(row[1]), int(row[2])))        
    for row in sorted2:
        writer.writerow(row)

该键功能首先按项目的row[1]比较它们,如果这些值相同,则按其row[2]比较它们可能无法给出您真正想要的顺序。您可能需要颠倒这些测试的顺序:

key=lambda row: (int(row[2]), int(row[1])) 

正如Peter Wood在评论中提到的那样,Writer对象具有一种writerows将在一次调用中写入所有行方法。这比在for循环中逐行写入行更有效

顺便说一句,无需执行此任务:

_ = next(reader)

我想这很清楚地表明您正在丢弃第一行,但是您可以在不执行分配的情况下编写调用:

next(reader)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Java中按两列对csv文件进行排序?

如何使用java中的某些列对CSV文件进行排序

如何对CSV文件中的多列进行排序

如何在python中对csv文件中的范围进行排序?

如何使用Python对两个.CSV文件中的仅前3个位置进行排序和存储,然后将它们存储在一个.CSV文件中的两列中?

如何在python中对两列进行透视和排序?

Python:对csv文件的列进行重新排序

在csv文件中对整数进行排序-python

如何在c#中用两列对csv文件进行排序

如何通过比较两列对数据框进行排序

Python如何根据CSV排序对Xml文件进行排序?

如何按两列或更多列对python pandas中的dataFrame进行排序?

如何使用 sorted() 函数在 Python 3 中对 CSV 文件中的数据进行排序?

在Python中合并两个文件并进行排序

使用Python中的Pandas,如何按agg函数创建的两列进行排序?

如何在 R 中对 .csv 文件进行排序

如何使用awk对csv文件中的记录进行排序

如何基于两列在ecto中对表进行排序

按日期对目录中的多个csv文件进行排序python

在 Pandas Python 中按两列对值进行排序

如何通过awk中的临时公共列连接两个CSV文件?

如何通过匹配值对Excel中的多列进行排序

如何在Powershell中对CSV列进行排序?

如何在 python Flask 中对两个或多个 CSV 文件进行验证

我如何通过 Python 中的“子键”对字典进行排序

使用pyspark对csv文件的列进行排序

按列对csv文件进行排序

如何根据Python列中的值将csv文件分为两个文件?

如何“排序CSV文件”的Python