当前位置: 首页 > news >正文

为什么python处理csv文件将某个值替换成另一个值并另存后,csv文件的大小减小了一半

这是个非常常见但容易让人疑惑的问题。在 Python 中处理 CSV 文件,将某个值替换成另一个值并另存后,发现 文件大小大幅减少(减半),这并不一定是异常,背后通常有以下几种可能原因:


✅ 主要原因分析

1. 🔁 替换的值更短或更频繁 → 文件整体变小

如果你将 大量长字符串替换为短字符串,或者清除了很多内容,自然会减小文件体积。

示例:
# 替换长字符串为短字符串
row['status'] = row['status'].replace("This is a long string", "short")
  • 原内容 "This is a long string" = 23 字节
  • 替换后 "short" = 5 字节
  • 替换 10,000 行,节省近 180 KB

2. 🧹 Python 自动移除了一些无用字符或空白

  • 原始 CSV 文件可能带有:

    • 空行
    • 空格
    • 多余的逗号
    • BOM 标记
    • 非标准换行符(如 \r\r\n

Python 读写 CSV 时,标准化了格式,导致体积变小:

with open('file.csv', newline='', encoding='utf-8') as f:reader = csv.DictReader(f)

这会统一换行、去除空字段等。


3. 🔄 原文件是 Excel导出带格式的CSV

有些 Excel 导出的 CSV 会携带:

  • 字节顺序标记(BOM)
  • 特殊编码(如 UTF-16、UTF-8-SIG)
  • 多余的引号

Python 以 UTF-8 重写后,文件变干净,体积自然减小。


4. 🧵 Python 默认 不重复输出空列

如果你用 DictWriter 只写入了你指定的列,而不是原始 CSV 的全部列,也可能导致文件缩小:

writer = csv.DictWriter(outfile, fieldnames=["id", "status"])

这种方式不会保留原 CSV 中未指定的其他列。


🧪 建议你检查:

你可以比较原始和处理后的 CSV 文件的以下几个方面:

wc -l original.csv processed.csv       # 行数
wc -c original.csv processed.csv       # 字节大小
diff original.csv processed.csv        # 差异对比

或者用 Python 分析内容差异:

import pandas as pd
df1 = pd.read_csv("original.csv")
df2 = pd.read_csv("processed.csv")
print(df1.shape, df2.shape)

✅ 总结

原因是否正常建议
替换文本导致内容变短✅ 正常无需担心
空行/空白字符被自动清理✅ 正常更干净
字符编码或格式被优化✅ 正常文件更标准
输出时字段减少⚠️ 留意若需保留全部列,指定完整 fieldnames

相关文章:

  • 视觉疲劳检测如何优化智能驾驶的险情管理
  • 基于STM32设计的扫地机器人
  • 双向循环链表及实现
  • 数学术语之源——(矩阵或行列式的)秩数(rank)
  • 机器学习1——贝叶斯理论上
  • GPU 性能可变性分析框架
  • 60 python asyncio模块(异步IO)
  • CANdela/Diva系列10--CDD文件在CANoe工程的应用2
  • LeetCode 312 戳气球题解(Swift)+ 区间 DP 原理详解 + 可运行代码
  • 高斯过程动态规划(GPDP)
  • FLUX.1 Kontext(Dev 版)训练lora基础教程
  • 将listener转换为事件流
  • 系统思考:结构影响行为
  • VS2022配置x86/x64调用32位和64位汇编语言动态库环境
  • 【C/C++】C++26新特性前瞻:全面解析未来编程
  • 【k近邻】 K-Nearest Neighbors算法原理及流程
  • 双指针技巧深度解析
  • 新一代python的包管理软件mamba
  • 详解HashMap底层原理
  • JDBC 工具类:1.0到3.0版本