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

作者站长头像
站长
· 阅读数 16

题目描述

读取 西北地区省级行政区人口.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

实际结果

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

回复
1个回答
avatar
test
2024-07-14

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

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))
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容