当前位置: 首页 > 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

http://www.lryc.cn/news/576237.html

相关文章:

  • 详解HashMap底层原理
  • 三、java项目自动部署流水线搭建
  • Java--数组
  • 如何使用免费软件写论文?六个免费论文生成软件使用指南
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的目标轨迹预测与防范策略制定(325)
  • Class2基础优化算法
  • 悦己汉服体验馆小程序(协同过滤算法、WebSocket即时聊天)
  • 优化 ArcPy 脚本性能
  • 桌面小屏幕实战课程:DesktopScreen 13 HTTP SERVER
  • 电子电气架构 --- 涵盖“诊断与 ECU 平台”领域特有项目要求(上)
  • 鸿蒙 List 组件解析:从基础列表到高性能界面开发指南
  • 智能制造数字孪生集成交付生态链:智慧产线极速克隆,孪生重构生产周期
  • 什么是 A/B 测试?
  • swift 对象转Json
  • matplotlib 绘制热力图
  • 基于JavaWeb的校园失物招领系统设计与实现
  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • SQL学习笔记4
  • 华为云Flexus+DeepSeek征文|高可用部署 Dify 平台构建 Flux 绘画中台 Chatflow 的设计与实现
  • SYSCFG 时钟在 GD32F4 系列微控制器中的作用
  • 【策划所需编程知识】
  • 每日算法刷题Day39 6.26:leetcode前缀和2道题,用时1h20min
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • Unity性能优化-渲染模块(1)-CPU侧(1)-优化方向
  • Spring Boot整合Redis指南
  • C++ 快速回顾(三)
  • PICkit3编程器MCLR引脚全解析
  • vue-27(实践练习:将现有组件重构为使用组合式 API)
  • <script setup> 语法糖
  • Netty入门案例:简单Echo服务器(同步)