【摘要】上篇博文就os模块中关于文件与目录操作的函数都梳理了一遍,本片博文将要实现文件后缀名的批量修改,以此进一步掌握os模块的文件操作。
问题描述:

  1. 在当前目录新建目录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)

生成的验证码符合要求。

python 批量修改java项目包名 python批量修改文件后缀名_python 批量修改java项目包名


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为后缀的文件已经生成。

python 批量修改java项目包名 python批量修改文件后缀名_python 批量修改java项目包名_02


python 批量修改java项目包名 python批量修改文件后缀名_验证码_03


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')

python 批量修改java项目包名 python批量修改文件后缀名_验证码_04


python 批量修改java项目包名 python批量修改文件后缀名_后缀名_05


搞定~~~~