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

如何导出以分号(;)作为列分隔符的CSV文件?

解决CSV文件分号分隔符的问题

你的问题出在错误的格式化语法和冗余的嵌套调用上,直接调整分隔符即可,给你两种靠谱的写法:

方法1:修改原有%格式化字符串

把原来的制表符\t全部替换成分号;,去掉多余的重复制表符,保证每个字段间只用一个分号分隔:

# 替换所有\t为;,删除重复的制表符
line = "%s;%s;%.3f;%d;%s;%s;%s\n" % (aa, bb, cc, dd, ee, ff, gg)
self.output_file.write(line)

注意你后来的代码里多了个hh参数,但前面的格式字符串没有对应位置,记得删掉或者补全格式位,不然会报参数不匹配错误。

方法2:用str.format()替代%操作符(更推荐)

如果想换成format写法,直接把占位符对应好,用分号分隔字段:

line = "{0};{1};{2:.3f};{3};{4};{5};{6}\n".format(aa, bb, cc, dd, ee, ff, gg)
self.output_file.write(line)

也可以用更清晰的关键字占位(变量名合适时):

line = "{aa};{bb};{cc:.3f};{dd};{ee};{ff};{gg}\n".format(aa=aa, bb=bb, cc=cc, dd=dd, ee=ee, ff=ff, gg=gg)
self.output_file.write(line)

为什么你的写法无效?

你写的"{:;}".format(...)是完全错误的语法:

  • {:;}不是合法的format占位符,format没有这种格式规则,会直接导致格式化失败
  • 你已经用%做了一次格式化,再套一层format完全多余,相当于把带制表符的完整字符串当成一个参数处理,既没替换成分号,还会引发错误导致文件写入不完整,所以文件一直处于加载状态。

另外建议用with语句管理文件,确保文件自动关闭,避免被占用:

def write_tick_data(self, output_filename="TEST1.csv"):
    with open(output_filename, 'w', encoding='utf-8') as self.output_file:
        # 写入表头和数据逻辑
        line = "%s;%s;%.3f;%d;%s;%s;%s\n" % (aa, bb, cc, dd, ee, ff, gg)
        self.output_file.write(line)

内容的提问来源于stack exchange,提问作者mmurer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:19:47