2017-01-03 5 views
0

Я пишу файл csv. Обе строки [3] и строка [4] являются столбцами даты в моем исходном файле csv. Строка [3] и строка [4] показывают поплавки. В файле csv оба из них являются целыми числами, но когда я запускаю код Python, он показывает ошибку, указывающую десятичную.Преобразование столбцов в datetime

import csv 
import xlrd 
import time 
import datetime 

workbook = xlrd.open_workbook('T:/SUNDAY REPORT 12.30.16.xlsm') 
for sheet in workbook.sheets(): 
with open('{}.csv'.format(sheet.name), 'wb') as f: 
    writer = csv.writer(f) 
    writer.writerows(sheet.row_values(row) for row in range(sheet.nrows)) 

print "CSV converted" 

time.sleep(5) 

def xldate_to_datetime(xldate): 
    tempDate = datetime.datetime(1900, 1, 1) 
    deltaDays = datetime.timedelta(days=float(xldate)-2) 
    TheTime = (tempDate + deltaDays) 
    return TheTime.strftime("%m/%d/%Y") 

with open("InfoCenterTracker.csv","rb") as source: 
    rdr= csv.reader(source) 
    with open("result.csv","wb") as result: 
     wtr= csv.writer(result) 
     next(rdr, None) # skip the headers 
     for r in rdr: 
      r[3] = xlrd.xldate.xldate_as_datetime(float(r[3]), workbook.datemode) 
      r[4] = xlrd.xldate.xldate_as_datetime(float(r[4]), workbook.datemode)     if r[1] == "": 
       pass 
      else: 
       wtr.writerow(r[1:19]) 

     print "Columns converted to datetime" 

Ошибка:

r[3] = xlrd.xldate.xldate_as_datetime(float(r[3]), workbook.datemode) 
ValueError: could not convert string to float: 

Значения в CSV:

Week(Row[3]): Date(row[4]): 
    42735.0   42730.0 
    42735.0   42730.0 
    42735.0   42731.0 
    42735.0   42731.0 
+0

Я отредактировал мой оригинальный пост, чтобы отразить изменения. –

+0

Вы пробовали 'xlrd.xldate.xldate_as_datetime (int (42735.0), workbook.datemode)'? – Abdou

+0

Спасибо, я не пробовал, где я должен быть в этом фрагменте? –

ответ

1

использовать следующую функцию для преобразования Excel номер формата для объекта datetime

def xldate_to_datetime(xldate): 
    tempDate = datetime.datetime(1900, 1, 1) 
    deltaDays = datetime.timedelta(days=int(xldate)-2) 
    TheTime = (tempDate + deltaDays) 
    return TheTime.strftime("%m/%d/%Y") 

Затем измените date_format на

date_format = datetime.datetime.strptime(xldate_to_datetime(r[3:5][0]), "%m/%d/%Y") 
+0

Спасибо Imran, выдает ошибку date_format = datetime.datetime.strptime (r [3: 5] [0],'% m /% d /% Y ') Файл "C: \ Python27 \ Lib \ _strptime.py ", строка 325, в _strptime (data_string, format)) ValueError: данные времени 'Week:' не соответствует формату '% m /% d /% Y' –

+0

отредактировал мой ответ. Вы можете попробовать это вместо? – Imran

+0

ValueError: данные времени 'Неделя:' не соответствует формату '% m-% d-% Y' –

1

это должно сделать трюк вместе с кодом Имрана

r[3] = datetime.datetime.strptime(xldate_to_datetime(r[3]), "%m/%d/%Y") 

r[4] = datetime.datetime.strptime(xldate_to_datetime(r[3]), "%m/%d/%Y") 
+0

Спасибо Shijo. Он выдает ошибку. r [3] = datetime.datetime.strptime (r [3], '% m /% d /% Y') Файл «C: \ Python27 \ lib \ _strptime.py», строка 325, в _strptime (data_string , формат)) ValueError: данные времени 'Week:' не соответствует формату '% m /% d /% Y' –

+0

Можете ли вы поделиться с вами образцовыми данными? – Shijo

+0

Прилагается Shijo. –

Смежные вопросы