Я попытался успешно конвертировать файл 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()
спасибо за ваше время
Это shoud не конвертирует _text_ в поплавки, но нет никаких шансов с целыми числами, потому что Excel не делает этого различия, поэтому каждое число является float. Типовой тест лучше выражается как 'isinstance (x, unicode)' кстати. – BlackJack
Это не Python, который «читает числа как плавающие». Это Excel, который хранит * каждое * числовое значение как float. Я бы использовал разные формулировки, чем BlackJack: это не так, что Excel «не различает» между целыми числами и поплавками; это то, что Excel ** не имеет никакого числового типа, кроме float. –
В зависимости от того, что вы ожидаете от ввода, вы можете попробовать разобрать значение как int 'unicode (int (workheet.cell_value (r, c))). Этот подход завершится неудачно, если у вас есть текстовая строка «042.0», и вы не хотите отбрасывать ведущие или завершающие нули. Я думаю, что это может закончиться неудачно для логических и некоторых дат. Более надежным является использование типа [cell type] (http://www.lexicon.net/sjmachin/xlrd.html#xlrd.Cell-class), чтобы выяснить, как вы должны преобразовать значение ячейки. – romanows