【发布时间】:2017-05-17 22:32:47
【问题描述】:
我正在编写一个 csv 文件。 row[3] 和 row[4] 都是我原始 csv 文件中的日期列。 row[3] 和 row[4] 显示浮动。在 csv 文件中,它们都是整数,但是当我运行 Python 代码时,它会显示一个错误,突出显示小数。
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
【问题讨论】:
-
我已经编辑了我的原始帖子以反映更改。
-
你试过
xlrd.xldate.xldate_as_datetime(int(42735.0), workbook.datemode)吗? -
谢谢,我还没试过,我应该在sn-p哪里放它?
-
r[3] = xlrd.xldate.xldate_as_datetime(int(r[3]), workbook.datemode)和r[4] = xlrd.xldate.xldate_as_datetime(int(r[4]), workbook.datemode),在 for 循环内。 -
int 语法将失败,因为当我使用浮点数时存在小数点,它仍然存在加重错误 Abdou。 r[3] = xlrd.xldate.xldate_as_datetime(float(r[3]), workbook.datemode) ValueError: 无法将字符串转换为浮点数:。必须有办法解决它。
标签: python python-2.7 csv datetime