Python讀取Excel,日期列讀出來是數字的處理


Python讀取Excel,里面如果是日期,直接讀出來是float類型,無法直接使用。

通過判斷讀取表格的數據類型ctype,進一步處理。

返回的單元格內容的類型有5種:

ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error

ctype =sheet1.cell(iRow,iCol).ctype

參考示例如下:

1.准備一個Excel文件,文件名Book1.xlsx

從第2行的第1列開始向右,分別是2019年的7月的1、2、3、4日,2019-07-01、2019-07-02、2019-07-03、2019-07-04

A列單元格的類型:date

B列單元格的類型:Text

C列單元格的類型:Text

D列單元格的類型:Custom里的一種日期格式

2.Python文件,ReadExcelDemo.py,代碼如下:

#! -*- coding utf-8 -*-
#! @Time  :2019/7/4 15:46
#! Author :Frank Zhang
#! @File  :ReadExcelDemo.py
#!SoftWare PyChart 5.0.3
#! Python Version 3.7
import xlrd
import os
import time
from datetime import datetime
from xlrd import xldate_as_tuple

def main():
    sPath = os.getcwd()
    sFile = "Book1.xlsx"
    wb = xlrd.open_workbook(filename=sPath + "\\" + sFile)
    sheet1 = wb.sheet_by_index(0)
    nrows = sheet1.nrows
    ncols = sheet1.ncols
    
    for iRow in range(1,nrows):
        for iCol in range(ncols):
            sCell = sheet1.cell_value(iRow,iCol)

            #Python讀Excel,返回的單元格內容的類型有5種:
            #ctype: 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
            ctype = sheet1.cell(iRow,iCol).ctype

            #ctype =3,為日期
            if ctype == 3:                                      
               date = datetime(*xldate_as_tuple(sCell, 0))
               cell = date.strftime('%Y-%m-%d')              #('%Y/%m/%d %H:%M:%S')
               print(cell)
            #ctype =1,為字符串
            elif ctype == 1: 
                if isVaildDate(sCell):
                    t1 = time.strptime(sCell, "%Y-%m-%d")
                    sDate = changeStrToDate(t1,"yyyy-mm-dd")
                    print(sDate)
            else:
                    pass

def formatDay(sDay,sFormat):
    sYear = str(sDay.year)
    sMonth = str(sDay.month)
    sDay = str(sDay.day)

    if sFormat == "yyyy-mm-dd":
        sFormatDay = sYear +"-" +sMonth.zfill(2)+"-" +sDay.zfill(2)
    elif sFormatStyle == "yyyy/mm/dd":
        sFormatDay = sYear +"/" +sMonth.zfill(2)+"/" +sDay.zfill(2)
    else:
        sFormatDay = sYear+"-" + sMonth + "-" + sDay
        
    return sFormatDay

"""
功能:判斷是否為日期
"""
def isVaildDate(sDate):
    try:
        if ":" in sDate:
            time.strptime(sDate, "%Y-%m-%d %H:%M:%S")
        else:
            time.strptime(sDate, "%Y-%m-%d")
        return True
    except:
        return False

"""
   功能:把字符串格式的日期轉換為格式化的日期,如把2019-7-1轉換為2019-07-01
"""
def changeStrToDate(sDate,sFormat):
    sYear = str(sDate.tm_year)
    sMonth = str(sDate.tm_mon)
    sDay = str(sDate.tm_mday)

    if sFormat == "yyyy-mm-dd":
        sFormatDay = sYear +"-" +sMonth.zfill(2)+"-" +sDay.zfill(2)
    elif sFormatStyle == "yyyy/mm/dd":
        sFormatDay = sYear +"/" +sMonth.zfill(2)+"/" +sDay.zfill(2)
    else:
        sFormatDay = sYear+"-" + sMonth + "-" + sDay
        
    return sFormatDay

if __name__ == "__main__":
    main()

 3.執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM