[英]Converting from .xls to .csv and saving the dates in the correct format
具有以下結構的.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
。
wr.writerow([py_date] + [unicode(val).encode('utf8')for sh.row_values(rownum)] [1:]中的val)其他:
表示將日期寫為該行的第一列,我認為這不是您想要的。 然后,您好像將行從第二列拆分到末尾,然后將它們轉換為UTF8字符串。 由於第二列是數據中的日期,並且存儲為浮點數,因此看起來很高興將其轉換為字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.