1. 程式人生 > >Python組織文件 實踐:將帶有美國風格日期的文件改名為歐洲風格日期

Python組織文件 實踐:將帶有美國風格日期的文件改名為歐洲風格日期

sea ear tdi 根據 ada 獲取絕對路徑 占位符 day 改變

描述:假設有這樣一個任務,你需要將文件名中含有美國風格日期(MM-DD-YYYY)的部分更換為歐洲風格日期(DD-MM-YYYY),並且需要你處理的文件多達上千個

分析:檢查當前工作目錄的所有文件名,尋找美國風格的日期。如果找到,將改文件改名,交換月份和日期的位置,使之成為歐洲風格

程序需要做以下事情

  1)創建一個正則表達式,可以識別美國風格日期的文本模式

  2)調用 os.listdir() 找出工作目錄中的所有文件

  3)循環遍歷每個文件名,利用該正則表達式檢查他是否包含日期

  4)如果它包含日期,用 shutil.move() 對該文件改名

step1:為美國風格日期(MM-DD-YYYY)創建一個正則表達式

  可以根據每個數段的範圍來拼寫正則表達式,但又出現了一個問題,假如MM和DD的日期相同時可能會匹配到到錯的,你不能確定他是歐洲風格還是美國風格,但是仔細思考過後,我只是把它們翻轉過來,即是匹配到的是不準確的,但是因為他們相同,翻轉後也是相同的

  

 USADateRegex=re.compile(r‘‘‘(
                        ^(.*?)    #匹配文件名的全部
                        ((0|1)?\d)  #匹配月份並分組
                        [-.]   #分隔符為.或-
                        ([0-3]?[0-9])   #匹配日期並分組
                        [-.]
                        (19|20)\d\d
                        (.*?)$
                        )‘‘‘,re.VERBOSE)

   step2:識別文件名中日期部分

for filename in os.listdir(‘.‘):
    mo=USADateSearch(filename)
    if mo==None:
        print(‘-‘*20)
        continue
    #這裏必須把所有的值給取過來,不能只要月和日
    #獲得年月日各部分
    beforePart=mo.group(1)
    monthPart=mo.group(2)
    dayPart=mo.group(4)
    yearPart=mo.group(5)
    afterPart=mo.group(7)

  step3:構成新文件名,並對文件改名

#連接字符串
        euroFilename=beforePart+dayPart+‘-‘+monthPart+‘-‘+yearPart+afterPart
    #獲取絕對路徑
        amerFilename=os.path.join(path,filename)
        euroFilename=os.path.join(path,euroFilename)
    #重命名文件
        print(‘Renaming "%s" to "%s"...‘ %(amerFilename,euroFilename))  #這裏面之所以把占位符用雙引號括起來,是因為用單引號需要轉義,太麻煩
        os.rename(amerFilename,euroFilename)  #第一次運行時通常需要將這行註釋,用然後檢查上一行打印的信息,確認重命名爭取了後再運行

遇到的問題:

   管道匹配時句法

可能會存在的缺陷:

  匹配日期的正則表達式有漏洞:如會匹配XXX31.08.1995 未糾正

  調用 shutil.move() 來改名,會不會太浪費了,會造成無用的操作,畢竟我們只需要改變文件名(已解決)

Python組織文件 實踐:將帶有美國風格日期的文件改名為歐洲風格日期