Python 中如何对 CSV 文件行内指定数据进行排序并写入?

题目描述

读取 西北地区省级行政区人口.csv 文件的内容,按照人口进行排序,并且写入 西北地区省级行政区人口(按照人口排序).csv 文件中。(不使用第三方库)

西北地区省级行政区人口.csv 文件为:

陕西,3954
甘肃,2490
青海,594
宁夏,725
新疆,2589

西北地区省级行政区人口(按照人口排序).csv 文件内容为:

青海,594
宁夏,725
甘肃,2490
新疆,2589
陕西,3954

题目来源及自己的思路

使用 with open 打开并写入,并使用 sort 排序

相关代码

def workless2():
    with open("西北地区省级行政区人口.csv", mode='r', encoding='u8') as f:
        data1 = []
        for line in f:
            data1.append(line)
            data1.sort()
    with open("西北地区省级行政区人口.csv", mode='w', encoding='u8') as f:
        for x in data1:
            f.write(f"{str(x)}")

你期待的结果是什么?实际看到的错误信息又是什么?

期待结果

青海,594
宁夏,725
甘肃,2490
新疆,2589
陕西,3954

实际结果

image.png

阅读 1.7k
1 个回答

分步进行,先读取文件,然后再排序

sorted_list = []
with open("西北地区省级行政区人口.csv", mode='r', encoding='u8') as f:
    sorted_list = sorted([_.replace('\n', '') for _ in f.readlines()], key=lambda row: int(row.split(',')[-1]))
print(sorted_list)
['青海,594', '宁夏,725', '甘肃,2490', '新疆,2589', '陕西,3954']

你代码逻辑写的有点问题。

def workless2():
    data1 = [] # ①
    with open("西北地区省级行政区人口.csv", mode='r', encoding='u8') as f:
        # ① 这个data1在下文要使用,你要放到with 外面吧
        # data1 = []
        for line in f:
            # 可能有\n换行
            # data1.append(line)
            data1.append(line.replace('\n', ''))  # 移除换行
            # ② 你这样每加一行都进行排序,无意义
            # data1.sort()
    # data1.sort()  # ② 这样排序是按整行排序,达不到你的目的 
    # ③ 这样才可以。指定用哪个key排序  # FIXME: 这块要注意int()可能会抛出异常
    data1.sort(key=lambda row: int(row.split(',')[-1]))
    with open("西北地区省级行政区人口.csv", mode='w', encoding='u8') as f:
        # for x in data1:
        #     f.write(f"{str(x)}")
        # 数据不是很大的话,直接写入就行
        f.write('\n'.join(data1))
推荐问题
宣传栏