Tha*_*guy 5 python csv sorting python-3.x
我需要按列名对CSV表进行排序。我从CSV中获得的数据具有各种列数,但是列名是静态的。这是我的数据:
X,Blue,Black,Red,Green,Total
Thomas,2,0,0,0,2
Andy,0,1,0,0,1
Luise,0,0,2,1,3
Mark,1,0,0,1,2
Ronda,0,1,0,1,2
Run Code Online (Sandbox Code Playgroud)
漂亮的印刷品:
X Blue Black Red Green Total
Thomas 2 0 0 0 2
Andy 0 1 0 0 1
Luise 0 0 2 1 3
Mark 1 0 0 1 2
Ronda 0 1 0 1 2
Run Code Online (Sandbox Code Playgroud)
通常,我可以按排序,row[5]但是如果我得到的表没有绿色,或者表中有其他列-黄色,它将不再起作用。
因此,问题是,如何按名为的列对该CSV文件排序Total?
只能使用核心python模块,不能使用熊猫。:(
如果需要使用列名进行排序,则最好使用Python csv.DictReader()对象读取文件,如下所示:
import csv
with open('input.csv', 'r', newline='') as f_input:
csv_input = csv.DictReader(f_input)
data = sorted(csv_input, key=lambda row: (row['Total'], row['X']))
with open('output.csv', 'w', newline='') as f_output:
csv_output = csv.DictWriter(f_output, fieldnames=csv_input.fieldnames)
csv_output.writeheader()
csv_output.writerows(data)
Run Code Online (Sandbox Code Playgroud)
这样,Total无论您在何处,都可以根据该列进行排序。在csv.DictReader()读取每一行视为一个字典,使用第一行作为一个报头。然后可以将标头值用作字典项以访问项目,而不是使用带有normal的位置值csv.reader()。因此,您的第一个数据行将被读取为:
{'Total': '1', 'Blue': '0', 'Black': '1', 'Green': '0', 'X': 'Andy', 'Red': '0'}
Run Code Online (Sandbox Code Playgroud)
csv_input然后可以直接传递给它sorted()以创建行字典的排序列表。该key是total字段,然后还X对其中总相同的情况下现场。
然后将编写output.csv如下的排序:
import csv
with open('input.csv', 'r', newline='') as f_input:
csv_input = csv.DictReader(f_input)
data = sorted(csv_input, key=lambda row: (row['Total'], row['X']))
with open('output.csv', 'w', newline='') as f_output:
csv_output = csv.DictWriter(f_output, fieldnames=csv_input.fieldnames)
csv_output.writeheader()
csv_output.writerows(data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |