【问题标题】:Converting xls to csv in python在python中将xls转换为csv
【发布时间】:2013-12-26 03:10:09
【问题描述】:

我已成功将 xls 转换为 csv,但我遇到了问题。 csv文件本身看起来很正常,但是当我运行输出时,一切都错了。

changeWb = xlrd.open_workbook('test.xls')
sh = changeWb.sheet_by_name('detail')
csv_file = open('test2.csv', 'wb')
wr = csv.writer(csv_file, quoting=csv.QUOTE_NONE)
for rownum in xrange(sh.nrows):
    wr.writerow([unicode(entry).encode("utf-8") for entry in sh.row_values(rownum)])
csv_file.close()

我一开始没有任何 csv 文件,打开 csv_file 实际上是新打开一个新文件。 旧的输出是:

['001', '1387533864.0', '1387575618.0']
['003', '1387534098.0', '1387573600.0']

我需要类似的东西:

['1', '1387533864', '1387575618']    
['3', '1387534098', '1387573600']

底部输出是在我进入文件后,并保存为 csv(逗号分隔)。 请就如何使用 python 获得底部结果提出建议。

【问题讨论】:

    标签: python excel csv


    【解决方案1】:

    首先将值转换为int

    wr.writerow(sh.row_values(0))
    for rownum in xrange(1, sh.nrows):
        wr.writerow([str(int(entry)) for entry in sh.row_values(rownum)])
        #                ^^^
    

    【讨论】:

    • 您好,感谢您的回复。我的row 1实际上是string,后面是row 2以后的int,所以我不能把所有的值都转换成int
    • @VickPeh,在循环外写入标头。我更新了答案代码。
    • 这是我收到的错误:ValueError: invalid literal for int() with base 10: '1387533864.0'
    • @VickPeh,用str(int(float(entry))) 代替str(int(entry)) 怎么样?
    • @VickPeh,如果entry全是字符串,可以使用entry.partition('.')[0]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2014-06-05
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多