使用Python对CSV文件进行排序并输出
csv文件排序输出
类型:文件处理
描述
读入grade0.csv文件,按照要求对第i列升序排列后输出。(提示:可以使用语句fo=open('grade0.csv','r',encoding='UTF-8')
来打开文件。)
Grade0.csv文件的内容形如下图:
输入格式
输入为一个数正整数 i,要求根据 grade0.csv 文件的第 i 列值升序排列后输出文件中的数据,当第 i 列数据值相同时,按第 1 列数据的值辅助排序(测试数据保证为正整数且不超过数据列数)。
输出格式:
按行输出排序后的信息,数据列之间用tab(‘\t’)
分隔,最后一列后面没有空格。
示例 1
输入:
4
输出:
20170101 章阳 Male A
20170102 徐芳 Female A
20170112 胡瑞欣 Female A
20170113 田益宾 Male A
20170115 张铭武 Male A
20170106 周思云 Female B
20170109 刘春燕 Female B
20170110 刘兴怡 Female B
参考答案
def csv_to_lst(filename):
"""接收文件名为参数,读取数据到二维列表中,返回二维列表。形如
[['20170101', '章阳', 'Male', 'A'],... ['20170108', '刘忆宁', 'Male', 'E']]
"""
with open(filename, 'r', encoding='UTF-8') as f:
grade_in_lst = [line.strip().split(',') for line in f] # 逐行切分为列表,得到二维列表
return grade_in_lst
def sort_lst(list_name, n):
"""接收需要排序的二维列表名和整数的排序列序号(范围为:1,2,3,4)为参数,返回排序后的二维列表。"""
list_name.sort(key=lambda x: x[n - 1]) # 列序号从1开始,列表中的序列从0开始,排序依据用x[n - 1]
return list_name # 返回排序后的列表
def output(ls):
"""接收排序后的二维列表为参数,逐行输出,每行的元素间用制表符分隔。"""
for line in ls: # line 为子列表
print(*line, sep='\t') # *对子列表进行解包,得到多个元素,sep指定分隔符
if __name__ == '__main__':
file = 'grade0.csv'
num = int(input())
grade_list = csv_to_lst(file)
ls_in_sort = sort_lst(grade_list, num)
output(ls_in_sort)
作者:m0_62488776