我想最近这两年,你一定听说过 Python 的大名,至少广告是见的不少了。Python 之所以名气大,我觉得最主要是因为干的事情多。以我为例,在原来做动画的时候,公司内部用的流程管理软件是 Python 写的,Maya 内置的程序语言 Python 就是其中之一。此外,在其余 CG 软件中,也都有 Python 的身影,比如 Houdini、3Ds Max、Blender等等。最近我也碰上一事,尝试多次之后,最终通过 Python 解决了。事情是这样的,我这有一套视频教程,但是命名不规范,没有办法按序播放。目录结构如下:
1.*.mp4 2.*.mp4 ... 9.*.mp4 10.*.mp4 11.*.mp4 ... 99.*.mp4 100.*.mp4
我想聪明的你,已经发现问题所在了。在视频软件播放的过程中,在播放完 1.*.mp4
之后,不会播放 2.*.mp4
而是播放 10.*.mp4
。要解决这个问题需要将所有视频的前缀数字都改成 3 位数。文件少的时候可能有个两三分钟也就改好了,但是要是超过 100 个呢?还是要费上一番功夫的。百思不得其解的时候,想起 Python 了。最终通过编写代码,3 秒钟就完成了。下面是全部的代码。
import random import string from pathlib import Path from typing import Generator def random_strings(length: int = 8) -> str: """生成随机字符串 Parameters ---------- length : int, optional 字符串的长度, 默认长度为8个字节长 Returns ------- string 返回随机字符串 """ strings = string.ascii_letters + string.digits # 使用字母加数字组成可使用的所有字符 return "".join(random.choice(strings) for _ in range(length)) def create_file(filename: str) -> None: """创建文件 Parameters ---------- filename : string 指定文件名 """ with open(file=filename, mode="w", encoding="utf-8") as f: # 将文件按名写入到文件中 f.write(filename) f.close()
以上两个函数可以不写,我写这两个函数主要是怕在修改文件的时候出现莫名其妙的问题,所以就先用这两个函数用于生成一些测试用的文件。如果你也想要测试一下,可以用下面这段代码先生成一堆测试文件。
for i in range(1,122): # 先生成一个随机的文件名 file = f"{i}.{random_string()}.txt" # 创建这个文件 create_files(file)
接下来才是重点,下面的代码将利用 Path 类,获取指定路径下的所有文件,然后通过修改数字前缀,最终修改文件名。
def get_all_file_with_specify_extension( extension: str = "*.txt", dir: str = "." ) -> Generator: """获取所有指定拓展名的文件 Parameters ---------- extension : str, optional 拓展名, by default "*.txt" dir : str, optional 指定文件所在的目录,默认为当前文件夹 by default "." Returns ------- Generator 返回目录下的所有文件 """ path = Path(dir) return path.glob(extension) def rename_with_digits(file: str, length: int = 3, delimiter: str = ".") -> str: """修改前缀数字的长度 Parameters ---------- file : str 文件名称 length : int, optional 前缀数字的长度, by default 3 delimiter : str, optional 数字与文字之间的连接符, by default "." Returns ------- str 处理好的新文件名 """ numb, *extension = file.split(delimiter) numb = str(numb).rjust(length, "0") return f"{numb}.{'.'.join(extension)}" # 修改当前文件夹下面的文本文件 for file in get_all_file_with_specify_extension(): # 注意这里 file 是一个路径类,如果要修改文件名,应该使用 file.name if file.is_file(): new_file = file.with_name(rename_with_digits(file.name)) file.replace(new_file) # 修改指定目录下所有文件的文件名,不区分文件类型 # extension 这个变量用于指定拓展名,如果希望修改 MP4 文件,则设置为 MP4,这里修改所有文件 # dir 这个变量用于指定目录 for file in get_all_file_with_specify_extension(extension="*", dir="../JavaScript"): # 由于文件夹下可能存在目录,所以这里添加一个判断语句,只有在时文件的时候才修改。 if file.is_file(): new_file = file.with_name(rename_with_digits(file.name)) file.replace(new_file)
到这里需要说明以下,我的 Python 版本是 3.9.6 ,上述代码在 3.7 版本以上应该就可以运行。欢迎大家测试,点赞,转发。下篇文章分享通过 Python 下载百度文档。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论(0)