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()
感谢您的时间
它不应该将_text_转换为浮动,但没有机会与“整数”,因为Excel没有作出这种区分,所以每个数字都是一个浮点数。顺便说一下,类型测试更好地表达为“isinstance(x,unicode)”。 – BlackJack
这不是Python“将数字读取为浮点数”。它是Excel,它将每个*数值存储为一个浮点数。我会使用与BlackJack不同的措辞:与其说Excel不“区分”整数和浮点数,这是Excel **没有**浮点数以外的任何数字类型。 –
根据你所期望的输入是什么,你可以试着把这个值解析为一个int的unicode(int(worksheet.cell_value(r,c)))''。如果您有一个文本字符串“042.0”,并且您不想丢弃前导零或尾随零,则此方法将失败。它可能会失败的布尔和一些日期,我想。更强大的是使用[单元格类型](http://www.lexicon.net/sjmachin/xlrd.html#xlrd.Cell-class)来确定如何转换单元格值。 – romanows