使用xlrd库将Excel写入CSV时添加浮点值而非整数
我之前在使用一个xls转csv的工具,这个工具可以帮我把Excel表格转换成csv文件。
在我的Excel表格里,有一些整数值,但当我把它们写入csv文件时,它们却变成了浮点数。举个例子。
1 > 1.0
我的数据大概是这样的,
no name marks friend
01 kirk 190 sandy
02 stark 100 kim
结果是,所有的整数都变成了浮点数。
no name marks friend
01.0 kirk 190.0 sandy
02.0 stark 100.0 kim
有没有什么办法可以解决这个问题呢?
以下是参考代码,
# -*- coding: utf-8 -*-
import xlrd
import csv
from os import sys
def csv_from_excel(excel_file):
workbook = xlrd.open_workbook(excel_file)
all_worksheets = workbook.sheet_names()
for worksheet_name in all_worksheets:
worksheet = workbook.sheet_by_name(worksheet_name)
your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in xrange(worksheet.nrows):
wr.writerow([unicode(entry).encode("utf-8") for entry in worksheet.row_values(rownum)])
your_csv_file.close()
if __name__ == "__main__":
csv_from_excel(sys.argv[1])
1 个回答
2
在这一部分,你需要更加小心:
[unicode(entry).encode("utf-8") for entry in worksheet.row_values(rownum)]
你一开始就把entry
转换成字符串(unicode对象),然后再把这个字符串编码成utf-8格式。其实,你应该先检查一下entry
的内容,然后根据具体情况来处理它。
文档的说明有点简单:http://www.lexicon.net/sjmachin/xlrd.html#xlrd.Sheet.row_values-method -- 我猜entry
是Cell
类型的(http://www.lexicon.net/sjmachin/xlrd.html#xlrd.Cell-class),不过你可能需要自己多试试。