原题是将美国风格日期的文件名改为欧洲风格日期的文件名。本人把题目改为把欧美风格的文件名改为中国风格日期的文件名。
以下代码中的注释行,有需要者可以尝试一下。
另外,书上使用的是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)