描述: 多个文件, 文件名名包含美国风格的日期 ( MM-DD-YYYY), 需要将它们改名为欧洲风格的日期 ( DD-MM-YYYY)
代码 1: 先创建 100 个文件名为美国风格日期的文件 (文件路径为项目当前路径下)
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #先创建一百个文件名为美国风格日期的文件
- import os,random
- for num in range(100):
- mm=random.randint(1,12)
- dd=random.randint(1,31)
- yy=random.randint(1900,2099)
- #str.format(), 字符串格式化的功能, 通过 {} 和 : 来代替以前的 %
- #{:0>2d}: 数字补 0 (填充左边, 宽度为 2)
- #参考网址: https://www.runoob.com/python/att-string-format.html
- date='{:0>2d}-{:0>2d}-{}'.format(mm,dd,yy)
- #os.getcwd() 方法用于返回当前工作目录
- #在当前目录下创建一个 USdate 路径
- filePath=os.getcwd()+'\\US\\'
- if not os.path.exists(filePath):
- os.mkdir(filePath)
- #定义文件名
- fileName='file'+'{:0>3d}'.format(num+1)+'-'+date+'-###'+'.txt'
- #连接文件路径和文件名
- fileNameAndPath=filePath+fileName
- # 根据文件名字符串创建文件
- file=open(fileNameAndPath,'w')
- file.write('Empty!')
- print '%s is created' %fileNameAndPath
- file.close()
- print 'Done'
运行结果:
代码 2: 复制 US 文件夹下所有文件到 EU 文件夹下 (文件路径为项目当前路径下), 并重命名所有文件
注意: 若要重复执行此脚本, 需先删除第一次执行此脚本时创建的 EU 文件夹, 否则会报错: WindowsError: [Error 183]
- #!/usr/bin/python
- # -*- coding: UTF-8 -*-
- #在执行此文件前需先执行 create100File.py 来创建 100 个文件
- #若此脚本需重复执行, 需先删除第一次执行此脚本时创建的 EUdate 文件夹, 否则会报错: WindowsError: [Error 183]
- #文件名包含美国风格的日期 ( MM-DD-YYYY),
- # 需要将它们改名为欧洲风格的日期 ( DD-MM-YYYY)
- import os,shutil,re
- #创建一个识别美国日期的正则表达式
- # . : 默认匹配除 \ n 之外的任意一个字符
- # * : 匹配 * 号前的字符 0 次或多次
- # ?: 匹配前一个字符 1 次或 0 次
- # .*? : 合起来可表达任意个字符
- # re.VERBOSE: 表示在正则表达式字符串中允许空白字符和注释
- #参考网址: https://www.cnblogs.com/zj-luxj/p/6901048.html
- datePattern=re.compile(
- r"""
- ^(.*?) #日期前面的任意字符 group1
- ((0|1)?\d)- #月份: 以 0 或者 1 开头的两位正整数 group2,3
- ((0|1|2|3)?\d)- #日期: 以 0 或 1 或 2 或 3 开头的两位正整数 group4,5
- ((19|20)\d\d) #年份: 以 19 或 20 开头的四位正整数 group6,7
- (.*?)$ #日期后面的任意字符 group8
- """,re.VERBOSE
- )
- #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表
- for oldFileName in os.listdir('.\US'):
- # mo=datePattern.search(amerFileName) #与下面一行代码实现的作用相同
- #re.search 扫描整个字符串并返回第一个成功的匹配
- date=re.search(datePattern,oldFileName)
- #group():https://blog.csdn.net/weixin_43774516/article/details/88364761
- beforePart=date.group(1)
- monthPart=date.group(2)
- dayPart=date.group(4)
- yearPart=date.group(6)
- afterPart=date.group(8)
- #构成新文件名
- newFileName=beforePart+dayPart+'-'+monthPart+'-'+yearPart+afterPart
- #将 USdate 文件下所有文件复制到新创建的 EUdate 文件夹下并重命名
- #os.path.abspath(): 返回 path 规范化的绝对路径
- oldDir=os.path.abspath('.')+'\\US\\'
- newDir=os.path.abspath('.')+'\\EU\\'
- if not os.path.exists(newDir):
- os.mkdir(newDir)
- #shutil.copy(): 将第一个参数的路径下的文件复制到第二个参数的路径下
- shutil.copy(oldDir+oldFileName,newDir)
- #os.rename(): 重命名函数, 第一个参数为旧文件名, 第二个为新文件名
- os.rename(newDir+oldFileName,newDir+newFileName)
- print oldFileName,'已重命名为:',newFileName
- print 'Done!'
运行结果:
来源: http://www.bubuko.com/infodetail-3118610.html