【特别说明】Python入门实战练习系列内容,主要取材于开课吧-6小时大数据入门实战免费体验课程。在这里整理成个人学习笔记,仅供参考。
1.os模块常用操作方法
os模块提供了非常丰富的方法来处理文件和目录。
(1)os.getcwd():获取当前文件的工作路径
(2)os.name:判断当前使用的平台
若输出结果为posix,则表示当前为Linux平台,如果输出结果为nt,则表示使用的是windows平台。
(3)os.mkdir(path):创建文件夹
# 在当前路径下创建了一个名叫Python的文件夹
import os
os.mkdir('./Python文档')
涉及到路径问题,就需要用到os中的path模块,os.path模块主要用于文件的属性获取。
(4)os.path.exists(path):判断该路径下的文件是否存在
(5)os.path.abspath(path):返回该文件的绝对路径
绝对路径是指,从根目录开始的路径,如mac是从/Users/…开始的。
(6)os.path.isdir(path):判断给定的路径是否是文件夹
(7)os.path.isfile(path):判断给定的路径是否是文件
os.path.isdir('./Python文档') #True
os.path.isfile('./Python文档') #False
os.path.isfile('./os模块.ipynb') #True
(8)os.path.splitext(path):拆分文件名,分离文件名与扩展名
os.path.splitext('os模块.ipynb')
# 以元组的形式呈现 ('os模块','.ipynb')
os.path.splitext('/Users/nichole/Desktop/os模块.ipynb')
# ('/Users/nichole/Desktop/os模块','.ipynb')
(9)os.path.getctime(path):获取文件创建的时间
result = os.path.getctime('/Users/nichole/Desktop/os模块.ipynb')
result
# 1597399882.84969
运行之后得到的数字,在代码中叫做时间戳,实际代表的是1970-01-01 00:00:00到当前的秒数。
想要得到我们将时间戳改成指定的时间,可如下操作:
import time
timearr = time.localtime(result)
mytime = time.strftime('%Y-%m-%d %H:%M:%S',timearr)
mytime
# 2020-08-14 18:11:22
(10)os.listdir(path):获取指定的文件夹中所有文件或文件夹的名字的列表
import os
# 在桌面创建文件夹
os.mkdir('/Users/nichole/Desktop/小皮球')
# 在小皮球📁中再创建三个文件夹:学习、实习、生活
os.mkdir('/Users/nichole/Desktop/小皮球/学习')
os.mkdir('/Users/nichole/Desktop/小皮球/实习')
os.mkdir('/Users/nichole/Desktop/小皮球/生活')
# 返回小皮球📁中文件夹名的列表
os.listdir('/Users/nichole/Desktop/小皮球')
# ['生活', '学习', '实习']
(11)os.rename(oldpath, newpath):修改文件名
(12)os.path.join(path1, newpath):路径拼接
# 将小皮球文件夹下的实习文件夹改名成工作文件夹
oldpath = os.path.join('/Users/nichole/Desktop/小皮球', '实习')
newpath = os.path.join('/Users/nichole/Desktop/小皮球', '工作')
os.rename(oldpath, newpath)
2.案例:批量修改指定文件名
现在想要通过程序来实现文件修改自动化,主体步骤大致如下:
1.传入一个指定的路径
2.获取该路径下的文件名
3.修改文件名
2.1 将指定文件夹中所有内容添加同一后缀
首先,我们先进行一个加统一后缀的批量处理,具体过程如下:
# 批量修改文件名字的函数
def filename_modify(target_dir,addstr=''):
# 1.判断路径是否存在
if os.path.exists(target_dir)==False:
raise Exception('该路径不存在')
# 2.遍历文件夹中的文件名
for file in os.listdir(target_dir):
# 2.1 分割文件名和拓展名
filename = os.path.splitext(file)[0]
fileExpand = os.path.splitext(file)[1]
# 2.2 将所有文件的后面添加指定后缀addstr
newname = filename + addstr + fileExpand
# 2.3 修改名字
oldpath = os.path.join(target_dir, file)
newpath = os.path.join(target_dir, newname)
os.rename(oldpath, newpath)
# 例:将小皮球文件夹下的所有文件名均加上‘-Nichole’的后缀
filename_modify('/Users/nichole/Desktop/小皮球',addstr='-Nichole')
2.2 文件修改类型的多样化
实际中,可能遇到的场景是,我们只想修改文件夹中文件的名字,对于其中文件夹的名字不做变动。那么,可以在 2.1 分割文件名和拓展名后添加判断语句。至少有两种方式,如下:
# 方式一:直接判断给定的路径是否是文件夹,若返回True,则continue结束本次循环
if os.path.isdir(os.path.join(targrt_dir,file)):
continue
# 方式二:通过判断是否有文件拓展名来判断给定的路径是否是文件夹,若拓展名为空,表明是文件夹
if fileExpand == '':
continue
进一步来看,如果我们只想修改excel文件,那么我们就需要接着添加一个判断语句,以此来筛选出待修改的文件类型。
这个时候,我们可以在函数中设置一个参数,而这个参数值即代表的是想要修改的文件类型,具体如下:
def filename_modify(target_dir,addstr='',filetype=None):
文件类型参数默认为None,若有指定的文件类型filetype != None,但文件拓展名中不存在该类型文件filetype not in fileExpand,则结束本次循环,以此达到一个过滤未指定类型文件的效果。
if filetype != None and filetype not in fileExpand:
continue
2.3 文件修改内容的多样化
实际中,可能有时我们并不想添加后缀,而是想在所有文件的前面加上一个前缀;或者我们并不想只是添加内容,而是想将文件内容进行一个替换,又该如何操作呢?
此时,为了代码的适用性更广,就可以在函数中自行设置相关参数,对应设定一个判断语句,如下:
import re
def filename_modify(target_dir,addstr='',filetype=None,position='end',oldstr='',newstr=''):
# 1.判断路径是否存在
# 2.遍历文件夹中的文件名
# 2.1 分割文件名和拓展名
# 2.2 判断是否为文件夹、文件类型是否正确
# 2.3 判断添加的位置
if position == 'end':
newname = filename + addstr + fileExpand
elif position == 'head':
newname = addstr + filename + fileExpand
elif position == 'replace':
pattern = re.findall(oldstr,filename)
for value in pattern:
filename = filename.replace(value,newstr)
newname = filename + fileExpand
# 2.4 修改名字
在上述代码中,用到了re模块。
re模块,也是Python内置模块中的一个,主要用于支持正则表达式的使用。而所谓正则化表达式,就是一堆特殊的符号组成的规则,通过这个规则可以实现对字符串的匹配或过滤。这里,就不展开介绍了。
最后,给大家提供一个正则表达式语法的学习链接https://deerchao.cn/tutorials/regex/regex.htm,感兴趣的小伙伴可以自行进行学习哈~
本文介绍了如何使用Python的os模块进行文件和目录操作,重点讲解了批量修改文件名的方法,包括添加统一后缀、按文件类型修改以及自定义前缀或内容替换,并提到了正则表达式在文件名处理中的应用。
259

被折叠的 条评论
为什么被折叠?



