【发布时间】:2017-07-13 09:37:17
【问题描述】:
我正在使用 python 将我的 .csv 文件转换为 xlsx 文件,文件转换成功。同时,我也想更改单元格 num 类型,就像任何有浮点类型 xx.xxxx 的地方一样,这将减少为 .xx(2 个小数)值。
输入 test.csv 工作表,以“,”分隔
Name Date Total request sas rate
rasta777 16062017 387865 89.3456
rasta777 16062017 291293 67.675
rasta777 16062017 256418 100
rasta777 16062017 251558 98.98
我已经使用xlsxwriter 尝试了下面的python 脚本,但是遇到了错误。
import os
import glob
import csv
from xlsxwriter.workbook import Workbook
for csvfile in glob.glob(os.path.join('.', 'hourly.csv')):
workbook = Workbook(csvfile + '.xlsx')
worksheet = workbook.add_worksheet()
format = workbook.add_format()
format.set_bold()
format.set_font_color('blue')
format.set_num_format('0x02')
format1 = workbook.add_format({'font_color': 'blue'})
with open(csvfile, 'rb') as f:
reader = csv.reader(f)
for r, row in enumerate(reader):
for c, col in enumerate(row):
worksheet.write(r, c, col)
worksheet.set_row(0, 20, format)
worksheet.set_column('A:P', format)
workbook.close()
得到错误
"TypeError: *: 'Format' and 'int' 不支持的操作数类型"
我的第二个问题是生成的输出(如果我删除worksheet.set_column('A:P', format),则会得到输出)将单元格类型作为文本,而我的数据是除标题之外的所有数值。
【问题讨论】:
-
第一个问题可能是由于将十六进制值添加为字符串引起的。尝试使用 0x2 或仅使用 2。
-
第二个问题是由于 csv 模块会将所有数据读取为字符串,即使它们看起来像数字。您可以通过使用 XlsxWriter 中的
strings_to_numbers构造函数选项来解决此问题:.xlsxwriter.readthedocs.io/workbook.html#constructor -
添加 strings_to_numbers 后,这两个问题现在都解决了。我可以知道如何仅对特定列应用浮点数(.xx 格式)吗???根据我的表,第 4 列有浮点值。 worksheet.set_column('A:P', 18, format1) 将 format1 参数应用于所有列。我已经定义了一个 format2,它有 0x2 num 类型,如何将它添加到 worksheet.set 行?
标签: python python-2.7 xlsxwriter