python编程快速上手第九章项目(改):将带有美国和欧洲日期格式的文件名改为中国格式

原题是将美国风格日期的文件名改为欧洲风格日期的文件名。本人把题目改为把欧美风格的文件名改为中国风格日期的文件名。
以下代码中的注释行,有需要者可以尝试一下。
另外,书上使用的是os.listdir(),本人用了os.walk(),也把子文件夹中的文件名也进行了修改。

#! python3

# 本代码将欧美的日期习惯转换成中文习惯。

import tkinter as tk, os, shutil, re
from tkinter import filedialog
root = tk.Tk()
root.withdraw()

FolderName = filedialog.askdirectory()  #获取文件夹
#FileName = filedialog.askopenfilename()  #获取文件夹中的某文件

if '/' in FolderName :

    # 用\替换/,注意'\\'的用法,
    # 如果直接使用'\',会被系统识别成转义字符
    FolderName = FolderName.replace('/', '\\') 

#if '/' in FileName :
#    FileName = FileName.replace('/', '\\')

if len(FolderName) == 0 :
    print('未找到文件夹!')
else :
    print('当前操作的文件夹是:',FolderName)
    print('\n')

#if len(FileName) == 0 :
#    print('未找到文件!')
#else :
#    print('当前操作的文件是:',FileName)

#建立检索的正则表达式
cDate1 = re.compile(r'''^(.*?)       #任意字符串开始
                    ((|1|2|3)?\d)    #日
                    -((0|1)?\d)      #月
                    -(\d{
    
    4})         #年
                    (.*?)$           #任意字符串结束
                    ''',re.VERBOSE)  #re.VERBOSE表示忽略空白及注释

cDate2 = re.compile(r'''^(.*?)       #任意字符串开始
                    ((0|1)?\d)       #月
                    -(|1|2|3)?\d     #日
                    -(\d{
    
    4})         #年
                    (.*?)$           #任意字符串结束
                    ''',re.VERBOSE)  #re.VERBOSE表示忽略空白及注释     

# os.walk()返回三个参数:
#   当前文件夹名字符串、
#   当前文件下的子文件夹名字符串列表、
#   当前文件夹下的文件名字符串列表
for myfoldername, mysubfoldername, myfilename in os.walk(FolderName,True):
    #print(myfoldername)
    #print(os.listdir(myfoldername))  # 列出当前文件夹下的文件和子文件夹
    #print('\n')
    #if len(mysubfoldername) > 0 :
    #    print(mysubfoldername)
    #    print('\n')

    if len(myfilename) > 0 :
        for fname in range(len(myfilename)) :
            myfoldername = myfoldername.replace('/', '\\')
            oldfilename = myfoldername + '\\' + myfilename[fname]
            mo1 = cDate1.search(myfilename[fname])
            mo2 = cDate2.search(myfilename[fname])
            if mo1 == None and mo2 == None :
                continue
            else :
                if mo1 != None :
                    partbefore = mo1.group(1)
                    partday    = mo1.group(2)
                    partmonth  = mo1.group(3)
                    partyear   = mo1.group(4)
                    partafter  = mo1.group(5)
                elif mo2 != None :
                    partbefore = mo2.group(1)
                    partmonth  = mo2.group(2)
                    partday    = mo2.group(3)
                    partyear   = mo2.group(4)
                    partafter  = mo2.group(5)
                newfilename = partbefore + partyear +'-'+ partmonth +'-'+ partday + partafter
                newfilename = myfoldername + '\\' + newfilename
            shufle.move(oldfilename,newfilename)
            

猜你喜欢

转载自blog.csdn.net/any1where/article/details/128321839