一、基本操作
Python中修改文件名称可以使用os模块中的rename()方法,该方法接收两个参数:源文件名称和新文件名称。以下示例将文件名为“old_name”的文件修改为“new_name”:
import os
os.rename("./old_name", "./new_name")
需要注意的是,如果新文件名称与已有文件的名称相同,则会自动覆盖旧文件。
二、批量修改
如果要批量修改某个文件夹中的文件名称,我们可以使用循环遍历并逐一修改每个文件的名称。
以下示例将文件夹中所有的文件名后缀从“.txt”改为“.md”:
import os
dir_path = "./dir"
files = os.listdir(dir_path)
for filename in files:
portion = os.path.splitext(filename)
if portion[1] == ".txt":
newname = portion[0] + ".md"
os.rename(os.path.join(dir_path, filename), os.path.join(dir_path, newname))
首先我们获取文件夹中所有文件名,然后使用splitext方法将文件名分为文件名和扩展名两部分。
如果文件的扩展名为“.txt”,则我们将“.md”作为新扩展名来构造新的名称。最后使用os模块中的rename()方法,将旧名称和新名称合并,完成文件的修改。
三、添加日期后缀
我们可以使用datetime模块获取当前日期并添加到文件名的后缀中,以区分不同日期的文件。
以下示例将文件夹中的文件名称添加当前日期(格式为“年-月-日”)后缀:
import os
import datetime
dir_path = "./dir"
files = os.listdir(dir_path)
for filename in files:
name, ext = os.path.splitext(filename)
today = datetime.date.today().strftime("-%Y-%m-%d")
newname = name + today + ext
os.rename(os.path.join(dir_path, filename), os.path.join(dir_path, newname))
首先,我们使用splitext将文件名分为文件名和扩展名两部分,然后使用datetime模块的today()方法获取当前日期,并将其格式化为字符串。
接着,我们将日期字符串添加到文件名中,并使用os模块中的rename()方法完成文件名称的修改。
四、添加序号
我们也可以将文件名后面添加数字序号,以表示文件的不同版本。
以下示例将文件夹中的文件名称添加递增的数字后缀:
import os
dir_path = "./dir"
files = os.listdir(dir_path)
index = 1
for filename in files:
name, ext = os.path.splitext(filename)
newname = "{}_{}{}".format(name, index, ext)
index += 1
os.rename(os.path.join(dir_path, filename), os.path.join(dir_path, newname))
我们使用一个计数器index来生成递增的数字,然后将数字拼接到文件名中。最后使用os模块中的rename()方法完成文件名称的修改。
五、文件名称的安全性问题
文件名称的安全性问题是一个不容忽视的问题。如果我们的代码中存在漏洞,可能会导致文件名称被修改为非法名称,例如可执行文件、系统文件等。
针对这个问题,我们可以使用Python的pathlib模块,它提供了一系列方法来保障文件名称的安全性。
以下示例演示了如何使用pathlib模块进行安全性检查,并避免文件名称被修改为非法名称:
import os
import pathlib
dir_path = "./dir"
files = os.listdir(dir_path)
for filename in files:
name, ext = os.path.splitext(filename)
path = pathlib.Path(dir_path) / filename
if path.is_file() and path.suffix in {".txt", ".md", ".doc"}:
newname = name + "-new" + ext
path.rename(path.with_name(newname))
在此示例中,我们将文件名转换为pathlib提供的Path对象,然后使用is_file()方法判断该路径是否为文件,并使用suffix属性来检查文件扩展名是否为可用的扩展名。这样做可以避免文件名称被修改为非法名称。最后使用renmame()方法修改文件名称,with_name()方法指定了新的名称。