如何导出以分号(;)作为列分隔符的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
相关产品推荐
相关产品推荐

