2015-06-04 91 views
3

我试着成功将excel文件转换为csv,但它将所有数字(尽管它们是整数或excel文件中的文本)转换为浮点数。Python xlrd将整数和字符串转换为浮动

我知道python默认读取的数字是浮点数。

有没有机会将我所有的数字转换为字符串?

我的代码是波纹管

def Excel2CSV(ExcelFile, SheetName, CSVFile): 
import xlrd 
import csv 
workbook = xlrd.open_workbook(ExcelFile) 
worksheet = workbook.sheet_by_name(SheetName) 
csvfile = open(CSVFile, 'wb') 
wr = csv.writer(csvfile, delimiter=';', quoting=csv.QUOTE_NONNUMERIC) 

for rownum in xrange(worksheet.nrows): 
    wr.writerow(
     list(x.encode('utf-8') if type(x) == type(u'') else x 
       for x in worksheet.row_values(rownum))) 

csvfile.close() 

感谢您的时间

+0

它不应该将_text_转换为浮动,但没有机会与“整数”,因为Excel没有作出这种区分,所以每个数字都是一个浮点数。顺便说一下,类型测试更好地表达为“isinstance(x,unicode)”。 – BlackJack

+3

这不是Python“将数字读取为浮点数”。它是Excel,它将每个*数值存储为一个浮点数。我会使用与BlackJack不同的措辞:与其说Excel不“区分”整数和浮点数,这是Excel **没有**浮点数以外的任何数字类型。 –

+0

根据你所期望的输入是什么,你可以试着把这个值解析为一个int的unicode(int(worksheet.cell_value(r,c)))''。如果您有一个文本字符串“042.0”,并且您不想丢弃前导零或尾随零,则此方法将失败。它可能会失败的布尔和一些日期,我想。更强大的是使用[单元格类型](http://www.lexicon.net/sjmachin/xlrd.html#xlrd.Cell-class)来确定如何转换单元格值。 – romanows

回答

0

我的工作,各地已经先通过一个新的嵌套表处理Excel文件细胞逐个单元格,然后写将嵌套列表转换为CSV文件。

通过访问各个单元格值,我可以将它们转换为字符串数据类型,这样可以使单元格的内部原样保留在CSV文件中(当然,删除了字符串引号)。

以下是我访问单个单元格的值:

for rownum in xrange(worksheet.nrows): 
    for col_num in xrange (worksheet.ncols) : 
     value = str (worksheet.row (rownum) [ column_num ].value) 

我追加这些处理单元格的值,以单行和单列追加到作为原始输入的副本excel文件嵌套列表。