Python批量处理CSV文件完全指南:10行代码搞定万行数据,新手也能快速上手
工作中经常遇到需要批量处理CSV文件的场景,比如合并上百个销售报表、提取指定列数据、统计数据汇总,手动处理不仅费时间还容易出错。用Python处理CSV文件特别简单,10行代码就能搞定万行数据,今天就给大家分享最实用的CSV处理技巧,新手也能快速学会。
一、环境准备,30秒搞定
不需要安装复杂的工具,Python自带csv模块就能处理大部分CSV操作,要是需要更复杂的数据分析,安装pandas就行:
# 安装pandas(可选,处理大量数据更方便)
pip install pandas
避坑提醒:CSV文件尽量用UTF-8编码,不然容易出现中文乱码,保存的时候选择UTF-8编码,不要用GBK编码,不然读取的时候会报错。
二、基础操作:读取和写入CSV
1. 用自带csv模块读取CSV
适合处理简单的CSV文件,不需要安装额外库:
import csv
# 读取CSV文件
with open('销售数据.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
# 获取表头
header = next(reader)
print('表头:', header)
# 遍历每一行数据
for row in reader:
print(row) # 每一行是一个列表,按索引取值
2. 写入CSV文件
import csv
# 要写入的数据
data = [
['姓名', '销售额', '日期'],
['张三', 12000, '2026-04-01'],
['李四', 15000, '2026-04-01'],
['王五', 9000, '2026-04-01']
]
with open('销售数据_新.csv', 'w', encoding='utf-8', newline='') as f:
writer = csv.writer(f)
# 一次性写入所有行
writer.writerows(data)
# 也可以逐行写入
# writer.writerow(['赵六', 18000, '2026-04-01'])
实用技巧:写入的时候加`newline=”`参数可以避免Windows下出现空行,这是很多新手容易踩的坑。
三、用pandas处理CSV,效率提升10倍
处理大量数据或者需要复杂操作的时候,用pandas特别方便,几行代码就能搞定:
1. 读取和基本查看
import pandas as pd
# 读取CSV文件
df = pd.read_csv('销售数据.csv', encoding='utf-8')
# 查看前5行数据
print(df.head())
# 查看数据基本信息(行数、列数、数据类型)
print(df.info())
# 查看统计信息(最大值、最小值、平均值等)
print(df.describe())
2. 常用操作,几行代码搞定
这些常用操作都是一行代码就能解决:
# 1. 提取指定列
df_new = df[['姓名', '销售额']]
# 2. 筛选数据:筛选销售额大于10000的记录
df_filter = df[df['销售额'] > 10000]
# 3. 排序:按销售额从高到低排序
df_sorted = df.sort_values(by='销售额', ascending=False)
# 4. 去重:去除重复的姓名记录
df_unique = df.drop_duplicates(subset='姓名')
# 5. 新增列:计算提成(销售额*10%)
df['提成'] = df['销售额'] * 0.1
# 6. 数据汇总:统计总销售额
total_sales = df['销售额'].sum()
print(f'总销售额:{total_sales}')
# 7. 分组统计:按日期统计每天的销售额
df_group = df.groupby('日期')['销售额'].sum().reset_index()
3. 合并多个CSV文件
如果有上百个CSV文件需要合并,几行代码就能搞定:
import os
import pandas as pd
# 存放CSV文件的文件夹路径
folder_path = './销售报表/'
# 获取所有CSV文件
csv_files = [f for f in os.listdir(folder_path) if f.endswith('.csv')]
# 合并所有文件
df_all = pd.DataFrame()
for file in csv_files:
df = pd.read_csv(os.path.join(folder_path, file), encoding='utf-8')
df_all = pd.concat([df_all, df], ignore_index=True)
# 保存合并后的文件
df_all.to_csv('合并后的销售数据.csv', index=False, encoding='utf-8')
print(f'合并完成,共{len(df_all)}条数据')
这个方法不管是10个文件还是1000个文件,都能快速合并,不用手动复制粘贴,效率提升几十倍。
四、常见问题解决
1. 中文乱码问题
如果读取CSV出现中文乱码,试试这几个方法:
# 方法1:指定encoding为gbk
df = pd.read_csv('文件.csv', encoding='gbk')
# 方法2:指定encoding为utf-8-sig
df = pd.read_csv('文件.csv', encoding='utf-8-sig')
# 方法3:自动检测编码(需要安装chardet)
import chardet
with open('文件.csv', 'rb') as f:
result = chardet.detect(f.read())
df = pd.read_csv('文件.csv', encoding=result['encoding'])
2. 大文件读取优化
如果CSV文件特别大(几个G),一次性读入内存会爆,可以分块读取:
# 每次读取10000行
chunk_size = 10000
for chunk in pd.read_csv('大文件.csv', chunksize=chunk_size):
# 处理每一块数据
process(chunk)
3. 写入Excel
处理完的数据需要保存为Excel的话,直接用pandas就行:
df.to_excel('结果.xlsx', index=False, sheet_name='销售数据')
五、实战案例:批量统计月度销售报表
假设你有12个月的销售报表CSV,需要统计每个月的总销售额,输出到新文件:
import os
import pandas as pd
folder_path = './月度报表/'
result = []
for file in os.listdir(folder_path):
if file.endswith('.csv'):
# 提取月份(文件名比如"2026-01销售数据.csv")
month = file.split('销售数据')[0]
df = pd.read_csv(os.path.join(folder_path, file), encoding='utf-8')
total = df['销售额'].sum()
result.append({'月份': month, '总销售额': total})
# 保存结果
df_result = pd.DataFrame(result)
df_result.to_csv('月度销售统计.csv', index=False, encoding='utf-8')
print('统计完成')
整个过程只需要几秒钟,比手动打开每个文件统计快几十倍,还不会出错。
Python处理CSV文件真的特别简单,学会这些基础操作,工作中遇到批量处理数据的场景,再也不用手动加班了,几分钟就能搞定别人几个小时的工作量。赶紧试试吧,真的能大大提升工作效率!