核心概念
- CSV (Comma-Separated Values): 一种纯文本格式,用逗号分隔数据,它像表格一样,但本身不包含任何格式信息,处理 CSV 文件通常使用 Python 内置的
csv模块。 - Excel (
.xlsx,.xls): 二进制文件格式,可以包含工作表、图表、公式、格式等复杂信息,处理 Excel 文件最常用的库是pandas和openpyxl。
处理 CSV 文件
Python 内置了 csv 模块,无需安装即可使用。

示例 1:读取 CSV 文件
假设有一个名为 data.csv 的文件,内容如下:
Name,Department,Salary Alice,Engineering,90000 Bob,Sales,85000 Charlie,Marketing,95000
逐行读取(节省内存)
import csv
# 使用 'with' 语句可以自动关闭文件
with open('data.csv', mode='r', encoding='utf-8') as file:
# csv.reader 会返回一个迭代器,每次迭代返回一行数据
csv_reader = csv.reader(file)
# 读取表头
header = next(csv_reader)
print(f"表头: {header}")
# 逐行读取数据
for row in csv_reader:
# row 是一个列表
print(f"姓名: {row[0]}, 部门: {row[1]}, 薪资: {row[2]}")
读取为字典(更直观)
import csv
with open('data.csv', mode='r', encoding='utf-8') as file:
# csv.DictReader 会将每一行数据映射为一个字典,键是表头
csv_reader = csv.DictReader(file)
for row in csv_reader:
# 现在可以通过列名访问数据
print(f"姓名: {row['Name']}, 部门: {row['Department']}, 薪资: {row['Salary']}")
示例 2:写入 CSV 文件
import csv
# 要写入的数据
data_to_write = [
{'Name': 'David', 'Department': 'HR', 'Salary': '70000'},
{'Name': 'Eve', 'Department': 'Engineering', 'Salary': '98000'}
]
# newline='' 用于防止在 Windows 系统上写入时出现空行
with open('output.csv', mode='w', encoding='utf-8', newline='') as file:
# 定义表头
fieldnames = ['Name', 'Department', 'Salary']
# 创建一个 DictWriter 对象
writer = csv.DictWriter(file, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
# 写入数据
writer.writerows(data_to_write)
print("CSV 文件已成功写入 output.csv")
处理 Excel 文件
处理 Excel 文件最推荐的库是 pandas,因为它功能强大且代码简洁。pandas 在底层会使用 openpyxl 或 xlrd 来处理 .xlsx 文件。

安装 pandas
你需要安装 pandas 和它的依赖库。
pip install pandas pip install openpyxl # 用于处理 .xlsx 文件
示例 1:读取 Excel 文件
假设有一个名为 employees.xlsx 的文件,包含一个名为 "Sheet1" 的工作表。
import pandas as pd
# 读取 Excel 文件
# sheet_name='Sheet1' 指定要读取的工作表名,如果省略则读取第一个
# header=0 表示第一行是表头
df = pd.read_excel('employees.xlsx', sheet_name='Sheet1', header=0)
# 显示数据的前5行
print("数据预览:")
print(df.head())
# 获取数据的基本信息
print("\n数据信息:")
df.info()
# 获取描述性统计信息
print("\n描述性统计:")
print(df.describe())
示例 2:写入 Excel 文件
import pandas as pd
# 创建一个 DataFrame
data = {
'Name': ['Frank', 'Grace'],
'Department': ['Finance', 'IT'],
'Salary': [75000, 82000]
}
df_to_write = pd.DataFrame(data)
# 写入 Excel 文件
# index=False 表示不将 DataFrame 的索引写入文件
df_to_write.to_excel('new_employees.xlsx', sheet_name='New_Hires', index=False)
print("Excel 文件已成功写入 new_employees.xlsx")
示例 3:处理多个工作表
# 读取包含多个工作表的 Excel 文件
excel_file = 'multi_sheet.xlsx'
# 1. 读取所有工作表,返回一个字典 {sheet_name: DataFrame}
all_sheets = pd.read_excel(excel_file, sheet_name=None)
print(f"工作表列表: {list(all_sheets.keys())}")
# 获取特定的工作表
df_sheet1 = all_sheets['Sheet1']
print("\nSheet1 的内容:")
print(df_sheet1)
# 2. 只读取指定的工作表
df_sheet2 = pd.read_excel(excel_file, sheet_name='Sheet2')
print("\nSheet2 的内容:")
print(df_sheet2)
CSV 与 Excel 之间的转换
pandas 让转换变得非常简单。
CSV 转 Excel
import pandas as pd
# 读取 CSV 文件
df = pd.read_csv('data.csv')
# 写入 Excel 文件
df.to_excel('from_csv.xlsx', sheet_name='Sheet1', index=False)
print("已将 data.csv 转换为 from_csv.xlsx")
Excel 转 CSV
import pandas as pd
# 读取 Excel 文件
df = pd.read_excel('employees.xlsx', sheet_name='Sheet1')
# 写入 CSV 文件
# encoding='utf-8-sig' 可以防止 CSV 文件用 Excel 打开时中文乱码
df.to_csv('from_excel.csv', index=False, encoding='utf-8-sig')
print("已将 employees.xlsx 转换为 from_excel.csv")
总结与推荐
| 任务 | 推荐库 | 优点 | 缺点 |
|---|---|---|---|
| 读取 CSV | csv (内置) |
无需安装,轻量级 | 功能相对基础,处理大型文件时不如 pandas 方便 |
| 写入 CSV | csv (内置) |
无需安装,轻量级 | 功能相对基础 |
| 读取 Excel | pandas |
代码简洁,功能强大(数据清洗、分析等),自动处理表头 | 需要安装额外库 |
| 写入 Excel | pandas |
代码简洁,可轻松控制格式(需配合 openpyxl) |
需要安装额外库 |
| 复杂 Excel 操作 | openpyxl |
可以精确控制单元格样式、图表、公式等 | API 比 pandas 更底层,代码量稍多 |
| 快速转换 | pandas |
一行代码即可完成 CSV 和 Excel 的互转 | 需要安装额外库 |
给你的建议:

- 如果只是简单的读写 CSV 文件,使用 Python 内置的
csv模块就足够了。 - 如果涉及到数据分析、数据清洗,或者需要频繁在 CSV 和 Excel 之间转换,强烈推荐使用
pandas,它是数据科学领域的必备工具。 - 如果需要对 Excel 文件进行极其精细的操作,比如修改单元格颜色、字体、插入图片等,可以考虑直接使用
openpyxl库。
希望这份详细的指南能帮助你处理 Python 中的 Excel 和 CSV 文件!
