📅  最后修改于: 2023-12-03 14:52:52.031000             🧑  作者: Mango
在Python中,我们可以使用csv
模块来读取和操作CSV文件。当我们想要按多列排序CSV文件时,可以使用sorted
函数和自定义比较函数来实现。
首先,我们需要使用csv
模块中的reader
函数读取CSV文件。
import csv
with open('data.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile)
headers = next(csvreader) # 获取表头
data = [row for row in csvreader] # 获取数据
接下来,我们可以使用sorted
函数来按多列排序数据。比较函数需要返回一个数值,表示两个元素的大小关系。
def compare(row1, row2):
# 按第1列升序排列
if row1[0] < row2[0]:
return -1
elif row1[0] > row2[0]:
return 1
else:
# 如果第1列相等,按第2列降序排列
if row1[1] > row2[1]:
return -1
elif row1[1] < row2[1]:
return 1
else:
return 0
sorted_data = sorted(data, key=lambda row: compare(row, headers))
在上面的比较函数中,我们先按第1列升序排列,如果第1列相等,再按第2列降序排列。
最后,我们可以使用csv
模块中的writer
函数将排序后的数据写入CSV文件。
with open('sorted_data.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(headers)
csvwriter.writerows(sorted_data)
这样,我们就完成了按多列排序CSV文件的操作。
import csv
def compare(row1, row2):
# 按第1列升序排列
if row1[0] < row2[0]:
return -1
elif row1[0] > row2[0]:
return 1
else:
# 如果第1列相等,按第2列降序排列
if row1[1] > row2[1]:
return -1
elif row1[1] < row2[1]:
return 1
else:
return 0
with open('data.csv', 'r') as csvfile:
csvreader = csv.reader(csvfile)
headers = next(csvreader) # 获取表头
data = [row for row in csvreader] # 获取数据
sorted_data = sorted(data, key=lambda row: compare(row, headers))
with open('sorted_data.csv', 'w', newline='') as csvfile:
csvwriter = csv.writer(csvfile)
csvwriter.writerow(headers)
csvwriter.writerows(sorted_data)
注意:在写入CSV文件时,需要指定newline=''
参数,否则可能会出现空行。