具有以下结构的.xls
Matching Fields Date Person
1 2015-02-10 Bob
2 2015-01-27 Billy
我正在尝试将其转换为.csv并且我在转换日期方面遇到了问题,因为例如2015-02-10
在csv中保存为浮点数,而不是日期格式。
为了正确保存日期,这是我的代码:
# -*- coding: utf-8 -*-
import xlrd
import csv
def csv_from_excel():
wb = xlrd.open_workbook('C:/myfile.xls', encoding_override="cp1252")
sh = wb.sheet_by_name('Sheet1')
your_csv_file = open('C:/output.csv', 'wb')
wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
for rownum in xrange(sh.nrows):
print sh.row_values(rownum)[1]
date = sh.row_values(rownum)[1]
if isinstance( date, float) or isinstance( date, int ):
year, month, day, hour, minute, sec = xlrd.xldate_as_tuple(date,0)
py_date = "%04d-%02d-%02d" % (year, month, day)
wr.writerow([py_date] + [unicode(val).encode('utf8') for val in sh.row_values(rownum)][1:])
else:
wr.writerow([unicode(val).encode('utf8') for val in sh.row_values(rownum)])
your_csv_file.close()
csv_from_excel()
我得到的输出是:
"Matching Fields","Date","Person"
"2015-02-10","42031.0","Bob"
"2015-01-27","42031.0","Billy"
正如您在这里看到的有两个问题:
Matching Fields
,"1"
和"2"
的值未显示。如何解决这两个问题才能获得所需的输出?
"Matching Fields","Date","Person"
"1","2015-02-10","Bob"
"2","2015-01-27","Billy"
PS:使用[unicode(val).encode('utf8') for val in sh.row_values(rownum)]
代替sh.row_values(rownum)
的原因是因为我的csv上有一些俄语字符(这个例子没有显示),所以我需要将每个字符转换为utf8
使用该代码。
答案 0 :(得分:0)
wr.writerow([py_date] + [unicode(val).encode('utf8')for sh in sh.row_values(rownum)] [1:]) 否则:
说将日期写为行中的第一列,我认为这不是你想要的。然后看起来你将行从第二列拆分到结尾并将它们转换为UTF8字符串。由于第二列是数据中的日期,并且存储为浮点数,因此看起来很高兴将其转换为字符串。