You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Polars的write_csv时触发InvalidOperationError“file encoding is not UTF-8”的原因及追加CSV文件的推荐方案咨询

使用Polars的write_csv时触发InvalidOperationError“file encoding is not UTF-8”的原因及追加CSV文件的推荐方案咨询

嗨,我来帮你拆解这个问题~

首先说说你遇到的InvalidOperationError: file encoding is not UTF-8错误:
在Windows 10系统中,用open()函数打开文件时如果不指定编码,默认会使用系统本地编码(通常是GBK这类非UTF-8格式),而Polars的write_csv()方法默认要求写入的文件采用UTF-8编码,两者不匹配就触发了这个错误。

解决这个问题非常简单,只需要在打开文件时明确指定encoding="utf-8"参数就行,修改后的代码如下:

import polars as pl

df1 = pl.DataFrame({"a": [1, 2], "b": [3 ,4]})
df2 = pl.DataFrame({"a": [5, 6], "b": [7 ,8]})

with open("out.csv", mode="a", encoding="utf-8") as f:
   df1.write_csv(f)
   df2.write_csv(f, include_header=False)

接下来聊聊你关心的“这个玩具示例是不是追加CSV的推荐方案”:
这个逐次写入的方法是可行的,但要根据你的实际场景灵活选择:

  • 如果数据量不大,更简洁的方式是先把多个DataFrame合并成一个,再一次性写入CSV,这样能避免手动处理表头的麻烦:
    combined_df = pl.concat([df1, df2])
    combined_df.write_csv("out.csv")
    
  • 但如果数据量很大,合并后会造成内存压力,那逐次追加的方法就更合适,不过要注意几个细节:
    • 首次写入时要确保写入表头,后续追加必须加上include_header=False,避免重复表头
    • 始终指定UTF-8编码,避免跨系统的编码兼容问题
    • 如果需要适配不同系统的换行符,可以在write_csv()中指定new_line="\r\n"(Windows)或"\n"(Unix)

目前Polars还没有专门的append_csv()方法,所以上述两种方式都是当前的主流方案,你可以根据数据规模和需求来选。

备注:内容来源于stack exchange,提问作者SapereAude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 15:24:30