xlrd - конвертировать время Excel в mysql формат даты? - PullRequest
0 голосов
/ 18 января 2020

У меня есть этот код;

from xlrd import open_workbook
import csv

wb = open_workbook('test.xlsm')

for i in range(2, wb.nsheets):
    sheet = wb.sheet_by_index(i)
    print (sheet.name)
    with open("data/%s.csv" %(sheet.name.replace(" ","")), "w") as file:
        writer = csv.writer(file, delimiter = ",")
        print (sheet, sheet.name, sheet.ncols, sheet.nrows)

        header = [cell.value for cell in sheet.row(0)]
        writer.writerow(header)

        for row_idx in range(1, sheet.nrows):
            row = [int(cell.value) if isinstance(cell.value, float) else cell.value
                   for cell in sheet.row(row_idx)]
            writer.writerow(row)

Код работает нормально, однако в CSV-файле у меня есть дата Excel в нескольких столбцах, но скрипт конвертирует все как время Excel, есть ли способ указать, что для столбцы A, D, F, E, G, H для преобразования даты Excel в обычную mysql дату?

Ответы [ 2 ]

0 голосов
/ 28 января 2020

Я использовал pandas, который прекрасно работает.

0 голосов
/ 23 января 2020

Я не знаю о MySQL датах, но я уверен, что вы можете выяснить, как их получить, если у вас есть Python дат. Чтобы получить Python даты, используйте функцию xldate_as_datetime из xlrd. Вместо

int(cell.value)

вам нужно использовать

xlrd.xldate_as_datetime(cell.value, wb.datemode)

для значений, которые, как вы знаете, являются датами. Согласно вашему комментарию, вы знаете, какие из них являются датами. Но если вы не знали заранее, вы можете проверить тип ячейки Excel:

if cell.ctype == xlrd.XL_CELL_DATE:
    mydate = xlrd.xldate_as_datetime(cell.value, wb.datemode)

Я не хотел переписывать ваш код для вас. Вы должны быть в состоянии включить информацию из этого ответа в вашу программу.

...