【摘要】上篇博文就os模块中关于文件与目录操作的函数都梳理了一遍,本片博文将要实现文件后缀名的批量修改,以此进一步掌握os模块的文件操作。
问题描述:
- 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
先分析一下题意,拆解一下步骤。
1.文件名的格式有点类似于验证码,因此我们先完成文件名的生成这个函数(相当于自动生成验证码)
2.再在当前目录中新建一个目录img,在这个目录下批量创建文件,文件名第一步已经生成好了,直接调用函数即可。
3.最后一步再批量修改后缀名
1. 验证码的生成(这里是文件名) 验证码一般是由4位组成,有大小写字母和数字
import string
import random
def generate_code(length=4):
"""
默认生成4位验证码: 由两个大写字母,一个小写字母和一个数字组成;
"""
# 从某个序列里面随机获取几个元素;
code_li = random.sample(string.ascii_uppercase, 2) + random.sample(string.ascii_lowercase, 1) \
+ random.sample(string.digits, 1)
# 将生成的验证码顺序打乱;
random.shuffle(code_li)
# 将列表拼接成字符串
return "".join(code_li)
这里我们调用一下,看执行效果:
code = generate_code()
print(code)
生成的验证码符合要求。
2. 批量生成100个文件
import os
#定义了创建文件的函数
def create_files():
#题目要求我们在当前目录下,创建img目录
dirname = 'img'
#判断这个目录名是否存在,不存在的话才执行以下操作
if not os.path.exists(dirname):
os.mkdir(dirname)
print("目录%s创建成功" %(dirname))
# 循环100次,创建100个文件
for count in range(100):
#调用我们自定义的文件名随机生成函数generate_code()来随机生成文件名
filename = generate_code() + '.png'
#要将生成的文件放在img目录下
full_filename = os.path.join(dirname, filename )
os.mknod(full_filename)
print("%s创建成功" %(full_filename))
调用一下,我们看看效果
create_files()
目录img以及目录下的100个以.png为后缀的文件已经生成。
3.批量修改后缀名
import os
def modify_suffix(dirname, old_suffix, new_suffix):
"""
'hello.png' ----'hello.jpg'
img .png .jpg
:param dirname: 操作的目录
:param old_suffix: 原先的后缀名
:param new_suffix: 新的后缀名
:return:
"""
# 0-1).判断源后缀名是否以.开头, 如果不是,则添加;
if not old_suffix.startswith('.'):
old_suffix = '.' + old_suffix
# 0-2). 判断新的后缀名是否以.开头, 如果不是,则添加;
if not new_suffix.startswith('.'):
new_suffix = '.' + new_suffix
# 1. 判断查找的目录是否存在, 如果不存在, 显示报错
if not os.path.exists(dirname):
print("Error: 目录%s不存在" % (dirname))
# 2. 如果文件存在,做如下操作:
else:
# 2-1). 列出指定目录的所有文件名,其返回值是个列表,列表中的每个字符串为文件名;
filenames = os.listdir(dirname)
# 2-2). 依次遍历目录的每一个文件名;
for filename in filenames:
# 2-3). 如果文件是以old_suffix结尾,则对改文件重命名;
if filename.endswith(old_suffix):
# 修改后缀名
# 2-3-1). 将后缀名和文件名本身分隔开; hello.png === hello .png, 并生成新的文件名
#将拿到的文件名,分隔其后缀名和文件名。拿到文件名与新的后缀名拼接
new_filename = os.path.splitext(filename)[0] + new_suffix
full_old_filename = os.path.join(dirname, filename)
full_new_filename = os.path.join(dirname, new_filename)
# 2-3-2). 重命名
os.rename(full_old_filename, full_new_filename)
print("重命名【%s】 为【%s】成功!" % (filename, new_filename))
调用一下:
modify_suffix('img', 'png', 'jpg')
搞定~~~~