从.xls转换为.csv并以正确的格式保存日期

时间:2016-05-27 09:01:12

标签: python excel csv

具有以下结构的.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"

正如您在这里看到的有两个问题:

  1. 第一列,Matching Fields"1""2"的值未显示。
  2. 日期的“浮动格式”仍在显示。
  3. 如何解决这两个问题才能获得所需的输出?

    "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使用该代码。

1 个答案:

答案 0 :(得分:0)

wr.writerow([py_date] + [unicode(val).encode('utf8')for sh in sh.row_values(rownum)] [1:])         否则:

说将日期写为行中的第一列,我认为这不是你想要的。然后看起来你将行从第二列拆分到结尾并将它们转换为UTF8字符串。由于第二列是数据中的日期,并且存储为浮点数,因此看起来很高兴将其转换为字符串。