Python/Jupyter下不调用pd.read_csv直接拼接合并CSV文件方法
大体积CSV无加载直接拼接实现
核心逻辑是通过二进制流逐块读写完成拼接,全程不解析、不加载全量文件内容,完全不依赖pd.read_csv,内存占用稳定在10MB级别,不会出现大文件加载时的内存溢出报错。
前置要求
- 两个待拼接CSV的列名、列顺序、字段格式完全一致,否则合并后会出现数据错位
- 运行代码前确保两个源文件没有被其他程序占用
实现代码
import os # 单次读写块大小,设为10MB,可根据磁盘性能自行调整 CHUNK_SIZE = 10 * 1024 * 1024 file_a = os.path.join("my folder", "a.csv") file_b = os.path.join("my folder", "b.csv") file_merged = os.path.join("my folder", "merged.csv") # 完整写入第一个CSV的所有内容 with open(file_a, "rb") as fin, open(file_merged, "wb") as fout: while True: content = fin.read(CHUNK_SIZE) if not content: break fout.write(content) # 追加第二个CSV内容,跳过首行表头避免重复 with open(file_b, "rb") as fin, open(file_merged, "ab") as fout: fin.readline() # 丢弃表头行 while True: content = fin.read(CHUNK_SIZE) if not content: break fout.write(content)
补充说明
- 二进制读写模式不会修改原文件编码,不管文件是utf-8、带BOM的utf-8还是gbk编码都能正常拼接
- 拼接速度只受磁盘读写速度限制,比pandas加载后合并快10~100倍
- 如果需要拼接更多同结构CSV,只需要仿照第二个文件的处理逻辑循环追加即可,每个后续文件都要跳过首行表头
- 如果确认第二个文件没有多余表头(比如提前做过去除处理),删掉
fin.readline()这行即可
内容的提问来源于stack exchange,提问作者Taekhyun
相关产品推荐
相关产品推荐

