簡體   English   中英

從.xls轉換為.csv並以正確的格式保存日期

[英]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"

如您所見,這里有兩個問題:

  1. 第一列,“ Matching Fields"1""2"的值未顯示。
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM