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