您现在的位置是:网站首页 > 博客日记 >

python检查后缀名|判断后缀名是否符合要求|获取目录内指定后缀文件|批量更改后缀|确保参数严格性|函数返回类型

作者:YXN-python 阅读量:59 发布日期:2023-04-21

1、检查后缀名

检查后缀名是否带有点(.),如果没有则添加一个点,可以传入后缀字符串或可迭代对象,比如元组、列表等。

from collections.abc import Iterable
from typing import Union

def check_suffix(suffix: Union[Iterable, str]):
    if isinstance(suffix, str):  # 传入字符串
        if not suffix.startswith('.'):
            suffix = '.' + suffix
    else:  # 传入可迭代对象
        suffix = tuple([item if item.startswith('.') else '.' + item for item in suffix])
    return suffix

参数及返回值说明:suffix为后缀名,关键字参数,Union[Iterable, str]表示参数类型可以是可迭代对象或者字符串,下方中 -> None表示函数的返回类型是 None

2、多元素判断是否合规

有了检查后缀名的函数,接下来我们可以判断某些文件是否符合你指定的某些格式。

def check_compliance(files: Iterable, suffix: Union[Iterable, str]) -> None:
    suffix = check_suffix(suffix)
    for file in files:
        if file.endswith(suffix):
            print(f'{file} 符合要求')

check_compliance(('a.txt', 'b.csv', 'c.py', 'd.c'), ('c', 'h', 'py'))

3、获取文件夹内指定后缀文件

有了检查后缀名的函数,还可以在此继续应用

def get_folder_specify_suffix_file(folder_path: str, suffix: Union[Iterable, str]):
    """
    获取文件夹内所有指定后缀的文件(包括子目录)
    :param folder_path: 目录
    :param suffix: 后缀名,获取多个 可以传入迭代对象
    :return: 符合条件的文件列表(绝对路径)
    """
    suffix = check_suffix(suffix)
    file_list = []
    for root, dirs, files in os.walk(folder_path):
        for name in files:
            if name.endswith(suffix):
                file_list.append(os.path.abspath(os.path.join(root, name)))
    return file_list

4、批量更改后缀名

批量更改指定目录下的指定后缀名的后缀名

def re_suffix(folder_path: str, suffix: Union[Iterable, str], new_suffix: str) -> None:
    """
    批量更改 文件夹内 所有 指定后缀名 文件 的后缀名
    :param suffix: 需要修改的后缀名
    :param new_suffix: 新后缀名
    :param folder_path: 文件夹
    :return:
    """
    suffix = check_suffix(suffix)
    new_suffix = check_suffix(new_suffix)
    files = get_folder_specify_suffix_file(folder_path, suffix)
    for file in files:
        if file.endswith(suffix):
            old_name = os.path.join(folder_path, file)
            new_name = os.path.splitext(old_name)[0] + new_suffix
            os.rename(old_name, new_name)

YXN-python

2023-04-21