要将一个包含元组的列表写入 CSV 文件,Python 标准库中的 csv 模块是最简单、最直接的方式。下面给出完整的代码示例,并逐部分解释。
一、将数据写入CSV文件
假设有一个列表,每个元组代表 CSV 中的一行数据:
import csv
tv_data = [
(1, "山花烂漫时", 9.6, 2024, "费振翔", "宋佳", "剧情 / 传记"),
(2, "问苍茫", 9.0, 2024, "王伟", "王仁君", "历史 / 剧情"),
(3, "我的阿勒泰", 8.9, 2024, "滕丛丛", "马伊琍、于适、周依然", "剧情 / 生活"),
(4, "天行健", 8.8, 2024, "楼健 / 卫立洲", "暂缺", "历史 / 武侠 / 悬疑"),
(5, "繁花", 8.7, 2024, "王家卫", "胡歌、马伊琍、唐嫣", "剧情 / 爱情"),
(6, "唐朝诡事录之西行", 8.6, 2024, "柏杉", "杨旭文、杨志刚", "悬疑 / 古装")
]
# 写入 CSV 文件
csv_file = r"C:\XXX\output.csv"
with open(csv_file, mode='w', newline='', encoding='gbk') as file:
writer = csv.writer(file)
# 写入表头(可选)
writer.writerow(["排名", "影片名称", "评分","上映年份", "导演", "主演", "影片分类"])
# 写入所有数据行
writer.writerows(tv_data)
print(f"数据已成功写入 {csv_file}")补充说明
1. 导入 csv 模块
csv 是 Python 内置模块,无需额外安装,直接 import csv 即可。
2. 打开文件时的参数
mode='w':写入模式(若文件已存在会覆盖)。newline='':非常重要。如果不设置,写入的文件在 Windows 上可能会出现多余的空行。这是官方推荐的做法。encoding='gbk 编码,确保中文字符等能正确处理。也可根据需要改为'utf-8'`。
3. 创建 csv.writer 对象
writer = csv.writer(file) 获得一个写入器。默认的分隔符是逗号(,),如果需要其他分隔符(如制表符 \t),可以添加参数 delimiter='\t'。
4. 写入数据
writer.writerow(iterable):写入单行(接收一个可迭代对象,如元组或列表)。writer.writerows(iterable_of_rows):批量写入多行,接收一个可迭代的行集合(例如二维列表或元组列表)。
示例中先用 writerow 写入表头(可选),再用 writerows 一次性写入所有数据元组。
5. 自动处理特殊字符
如果元组内部包含逗号、换行符或引号,csv.writer 会自动进行转义(例如用双引号包裹字段),保证生成的 CSV 文件格式正确。
没有表头时的简化写法
如果不需要表头,代码可以更简洁:
with open(csv_file, mode='w', newline='', encoding='gbk') as file:
# 写入所有数据行
csv.writer(file).writerows(tv_data)
二、写入到已有CSV文件(追加模式)
若想追加数据而不是覆盖原文件,将 mode 改为 'a'(append):
with open(csv_file, mode='a', newline='', encoding='gbk') as file:
csv.writer(file).writerows([(7, "不够善良的我们", 8.3, 2024, "徐誉庭", "林依晨、许玮甯", "剧情 / 爱情")])
注意:追加时不会自动处理表头重复问题,请自行确保数据结构一致。
使用 csv.DictWriter(按字典写入)
如果数据是字典列表,也可以使用 DictWriter,但本例中的元组列表用 csv.writer 已经足够。
三、CSV文件转Excel
要将 CSV 文件转换为 Excel(.xlsx)文件,最便捷的方法是使用 pandas 库。它提供 read_csv 读取 CSV,再通过 to_excel 直接生成 Excel 文件。 要将 CSV 文件转换为 Excel(.xlsx)文件,最便捷的方法是使用 pandas 库。它提供 read_csv 读取 CSV,再通过 to_excel 直接生成 Excel 文件。
示例代码
import pandas as pd
"""
读取之前生成的 CSV 文件
注意编码与之前一致,之前示例用了 gbk
这里实际验证发现 csv 文件得使用 utf-8 写入,然后写入Excel 文件才能成功
"""
df = pd.read_csv(csv_file, encoding='utf-8')
xls_file = r"C:\XXX\output.xlsx"
# 转换为 Excel 文件(需要额外安装 openpyxl 或 xlsxwriter)
df.to_excel(xls_file, index=False, engine='openpyxl')
print("CSV 已成功转换为 Excel 文件!")
补充说明
安装依赖:
pandas本身不处理 Excel,需要额外安装一个引擎,推荐openpyxl。pip install pandas openpyxl读取 CSV
pd.read_csv('output.csv', encoding='utf-8')会将 CSV 读入一个 DataFrame 对象。注意如果 CSV 文件使用了其他编码(如'gbk'),需要相应修改encoding参数。写入 Excel
to_excel('output.xlsx', index=False):index=False表示不将 DataFrame 的行索引写入 Excel(避免多出一列无意义的序号)。engine='openpyxl':指定使用 openpyxl 引擎(用于处理 .xlsx 格式)。如果不指定,pandas 会自动选择可用引擎。处理表头与数据:CSV 中的第一行(姓名、年龄、城市)会被自动当作列名保留到 Excel 中。
不使用 pandas 的方式
若不想引入 pandas,也可用标准库 csv + openpyxl:
import csv
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
csv_file = r"C:\XXX\output.csv"
with open(csv_file, 'r', encoding='utf-8') as file_obj:
reader = csv.reader(file_obj)
for row in reader:
ws.append(row)
xls_file = r"C:\XXX\output1.xlsx"
wb.save(xls_file)
print("CSV 已成功转换为Excel!")
这种方法更底层,但需要手动处理每一行的追加,不如 pandas 简洁。建议在项目已安装 pandas 时优先使用前者。
四、Excel转CSV
将 Excel 文件转换为 CSV 文件是一种常见且合理的操作,在很多场景下都是合适的。Excel 软件本身就提供“另存为 CSV”功能,编程库(pandas、openpyxl、xlrd)也支持导出 CSV。
是否合适 —— 取决于使用目的
csv 模块处理 | |
注意事项(重要)
1. 多工作表问题
Excel 文件可以包含多个工作表(Sheet),但 CSV 只能保存一个表格。
👉 需要指定转换哪个工作表,或者循环将每个工作表分别转为独立的 CSV 文件。
2. 公式 → 值
手动另存为 CSV 时,Excel 会保存公式的当前计算结果,公式本身丢失。 用编程库(如 pandas)读取时,默认得到的是计算后的值(除非设置 data_only=False)。
⚠️ 转换后无法再恢复公式。
3. 编码问题
CSV 是纯文本文件,编码很关键。
Excel 另存为 CSV 时,默认使用系统区域编码(中文 Windows 常为 GBK/ANSI)。 跨平台使用或包含中文时,建议统一为 UTF-8 with BOM(Excel 打开 UTF-8 无 BOM 会乱码)。
👉 编程时指定encoding='utf-8-sig'(写入带 BOM 的 UTF-8)或'gbk'。
4. 分隔符
标准 CSV 使用逗号 ,,但某些区域(如欧洲)Excel 可能使用分号;作为默认分隔符(因逗号用作千分位)。转换时明确分隔符,避免后续读取错误。
👉 可在 Python 中用delimiter=','或';'指定。
5. 特殊字符处理
单元格内含有逗号、换行符、双引号时,CSV 需要正确转义(字段加双引号)。
Excel 另存为 CSV 时会自动处理。 编程转换时需确保写入器遵循 RFC 4180 标准(Python 的 csv模块默认做到)。
6. 数据精度与格式
日期时间:转为 CSV 后变成固定格式的字符串(如 2023-01-01),丢失 Excel 的日期序号和显示格式。长数字(身份证号、电话号码):Excel 可能将其转为科学计数法,导致 CSV 中失真。
👉 转换前可将该列在 Excel 中设为文本格式,或在编程时指定列为字符串类型。
7. 大文件性能
Excel 文件( .xlsx)本质是压缩 XML,打开和解析较慢。转为 CSV 后,文件体积通常更小,读写速度更快。
但注意:超大的 Excel 文件(几十万行)转换为 CSV 仍可能较慢,建议分块处理。
Python 示例:Excel 转 CSV
import pandas as pd
xls_file = r"C:\XXX\output.xlsx"
# 读取 Excel 的指定工作表(这里读取第一个)
# dtype=str 防止数字变形
df = pd.read_excel(xls_file, sheet_name=0, dtype=str)
csv_file = r"C:\XXX\output_n.csv"
# 写入 CSV,使用 UTF-8 with BOM 编码,避免中文乱码
df.to_csv(csv_file, index=False, encoding='utf-8-sig')
print("Excel 已成功转换为 CSV 文件!")
夜雨聆风