Python组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期
描述:假设有这样一个任务,你需要将文件名中含有美国风格日期(MM-DD-YYYY)的部分更换为欧洲风格日期(DD-MM-YYYY),并且需要你处理的文件多达上千个
分析:检查当前工作目录的所有文件名,寻找美国风格的日期。如果找到,将改文件改名,交换月份和日期的位置,使之成为欧洲风格
程序需要做以下事情
1)创建一个正则表达式,可以识别美国风格日期的文本模式
2)调用 os.listdir() 找出工作目录中的所有文件
3)循环遍历每个文件名,利用该正则表达式检查他是否包含日期
4)如果它包含日期,用 shutil.move() 对该文件改名
完整代码如下
#! python3
# renameDates.py - 将带有美国风格日期的文件更名为欧洲风格日期
import os,re #为美国风格日期(MM-DD-YYYY)创建一个正则表达式
def USADateSearch(flodername):
USADateRegex=re.compile(r'''
^(.*?) #匹配文件名的全部
((0|1)?\d) #匹配月份并分组
[-.] #分隔符为.或-
([0-3]?[0-9]) #匹配日期并分组
[-.]
((19|20)\d\d)
(.*?)$
''',re.VERBOSE) return USADateRegex.search(flodername)
#在文件夹中创建文件
#filename-包含多个文件名的列表
#path-保存文件的路径
def creatfile(filename,path):
for filename in filename:
fileAbsPath=os.path.join(path,filename)
fileObj=open(fileAbsPath,'w')
fileObj.close() path=r'C:\\Users\\Administrator.SC-s\\AppData\\Local\\Programs\\Python\\Python37\\forTest'
foldername=['img-11.08.1995.txt','img-2333434.txt','img-21.05.1995.txt',
'img-12.08-1994.jpg','img-12.8.1994.gif','img-01.31.2030.txt',
'img-1.31.2030.jpg','img-05.05.1995.jpg','img-2-2-2011.txt']
#设置当前工作目录(要用绝对路径的话就不用设置了)
os.chdir(path)
#先创建文件,只运行一次,先不要删除
#creatfile(foldername,path)
#定义一个主函数吧
def main():
for filename in os.listdir(path):
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)
#连接字符串
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)
main()
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组织文件 实践:将带有美国风格日期的文件改名为欧洲风格日期的更多相关文章
- Pyhton项目实践:将带有美国风格日期的文件改名为欧洲风格日期
题目 项目要求:上千个文本文件,文件名包含美国风格的日期( MM-DD-YYYY),需要将它们改名为欧洲风格的日期( DD-MM-YYYY) 先写个创建一百个美国风格日期的文件 #! python # ...
- Python组织文件 实践:拷贝某种类型的所有文件
#! python3 #chapter09-test01- 遍历目录树,查找特定扩展名的文件不论这些文件的位置在哪里,都将他们 #拷贝到一个新的文件夹中 import os,shutil,pprint ...
- Python组织文件 实践:将文件的不同版本备份为ZIP文件
功能:备份文件夹.能将文件的不同版本备份下来,并且每个有不同的名字 #! python3 # backupToZip.py - 备份文件的不同版本到压缩文件中 import zipfile,os #f ...
- paip.复制文件 文件操作 api的设计uapi java python php 最佳实践
paip.复制文件 文件操作 api的设计uapi java python php 最佳实践 =====uapi copy() =====java的无,要自己写... ====php copy ...
- python实践项目十:zipfile模块-将一个文件夹备份到一个 ZIP 文件
描述:将指定路径下的某文件夹备份到一个zip文件 代码: #!/usr/bin/python # -*- coding: UTF-8 -*- # backupToZip - Copies an ent ...
- 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》
<Python 机器学习及实践–从零开始通往kaggle竞赛之路>很基础 主要介绍了Scikit-learn,顺带介绍了pandas.numpy.matplotlib.scipy. 本书代 ...
- Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》
首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...
- Python自动化运维之4、格式化输出、文件对象
Python格式化输出: Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[P ...
- [Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件
1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...
随机推荐
- 51nod 1649 齐头并进 (djikstra求最短路径,只用跑一次)
题目: 这道题有一个坑点:两种交通工具同时出发,中途不能停留在同一个小镇. 其实想通了就很简单,因为要么火车一步到达,要么汽车一步到达.不可能停留在同一个地方. 可是我还WA了好几次,蠢哭.想用BFS ...
- 转:IE 无法使用 js trim() 的解决方法
http://hi.baidu.com/yuiezt/item/756d0f4ec4d2640ec11613f9 var aa = $("#id").val().trim() ...
- 配置 centos apache 的日志文件为每天保存,在home分区
/usr/local/apache/bin/rotatelogs 这个执行程序会根据安装方式不同的位置也不同,yum安装的话,路径为:/usr/sbin/rotatelogs 改为: ErrorLog ...
- C语言基础 (3) C语言介绍
01回顾 02 语言介绍 语言是人和人交流,C语言是人和机器交流. 03_为什么学C语言 04_第一个C代码编译运行 #include <stdio.h> int main() { // ...
- 洛谷3627 [APIO2009]抢掠计划
题目描述 输入格式: 第一行包含两个整数 N.M.N 表示路口的个数,M 表示道路条数.接下来 M 行,每行两个整数,这两个整数都在 1 到 N 之间,第 i+1 行的两个整数表示第 i 条道路的起点 ...
- luogu P4137 Rmq Problem / mex(可持久化线段树)
一开始想的是莫队,然后维护几个bitset,然后瞎搞.脑子里想了想实现,发现并不好写. 还是主席树好写.我们维护一个权值的线段树,记录每一个权值的最后一次出现的位置下标.我们查询的时候要在前\(r\) ...
- qume-kvm 命令管理
sudo /etc/init.d/acpid start 安装管理包工具 sudo apt install libguestfs-tools [ qemu-kvm qemu-kvm-tools vir ...
- 特斯拉正加快部署第三代Autopilot自动驾驶计算机
新浪科技讯,北京时间 4 月 10 日下午消息,据电动汽车新闻网站 Electrek 报道,特斯拉正在加快部署第三代 Autopilot 自动驾驶计算机,因为当前一代产品的计算能力即将被耗尽. 201 ...
- Camera Calibration 相机标定:原理简介(四)
4 基于3D标定物的标定方法 使用基于3D标定物进行相机标定,是一种传统且常见的相机标定法.3D标定物在不同应用场景下不尽相同,摄影测量学中,使用的3D标定物种类最为繁杂,如图-1的室内控制场,由多条 ...
- DataTable 数据导入MS ACCESS 数据库中 数字类型字段为空的解决办法
string strSql = "insert into GongCheng (GCSY,GCBH,GCBHOLD,GCMC,GCKCJD,GCJSDW,GCSJDW,GCKCDW,GCSG ...