使用xlrd库将Excel写入CSV时添加浮点值而非整数

-2 投票
1 回答
703 浏览
提问于 2025-04-18 09:18

我之前在使用一个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 -- 我猜entryCell类型的(http://www.lexicon.net/sjmachin/xlrd.html#xlrd.Cell-class),不过你可能需要自己多试试。

撰写回答