Polars写入CSV后字符串ID丢失前导零且自动转换
解决Polars导出CSV后Excel丢失前导零的问题
核心原因:CSV本身是纯文本格式,问题出在Excel自动将类数字字符串转为数值类型,而非Polars写入时的格式错误。以下是无需循环、适合大数据量的高效解决方案:
方案1:给目标列值添加单引号前缀(最直接)
通过Polars的字符串批量操作,给3PL TN列的每个值添加单引号前缀,Excel打开时会自动识别为文本类型,保留前导零,且单引号不会显示在单元格中:
# 批量处理目标列 pldf_csv = pldf_csv.with_columns( pl.col("3PL TN").str.add_prefix("'") ) # 写入CSV pldf_csv.write_csv(r"C:\mydir\code testings\result.csv")
方案2:给CSV添加格式声明(适合批量生成场景)
如果需要生成多个CSV且不想修改数据本身,可以在CSV开头插入Excel识别的格式指令,强制指定列的文本类型:
- 先让Polars将数据写入临时文件
- 批量给每个CSV文件头部插入格式声明(用文件流复制,高效不占内存)
示例代码:
import polars as pl import shutil # 先写入临时文件 temp_path = r"C:\mydir\code testings\temp_result.csv" pldf_csv.write_csv(temp_path) # 插入格式声明到最终文件 target_path = r"C:\mydir\code testings\result.csv" with open(temp_path, 'r', encoding='utf-8') as temp_file, open(target_path, 'w', encoding='utf-8') as target_file: # 写入分隔符声明+列格式指定 target_file.write('sep=,\n') target_file.write('"3PL TN",*text\n') # 复制原始数据内容 shutil.copyfileobj(temp_file, target_file)
注:此方式需保证格式声明的列名与CSV表头完全一致,适合固定列结构的批量生成需求。
方案3:指导用户正确导入CSV(无需修改文件)
如果不允许修改CSV内容,可以让用户通过Excel的导入功能打开文件:
- 打开Excel后,点击「数据」选项卡,选择「自文本/CSV」导入目标文件
- 在导入向导中,确认分隔符为逗号,找到
3PL TN列并设置数据类型为「文本」 - 完成导入后,前导零会完整保留
内容的提问来源于stack exchange,提问作者random student
相关产品推荐
相关产品推荐

