当我们需要自动保存一些文件的时候,文件名的编号往往需要自动递增。借助 Python 的一些库函数以及一些语法特性,可以方便地实现这个功能。
以下是一个完整的实现攻略:
步骤一:引入必要的库函数
我们需要使用 os 和 shutil 库函数。其中,os 模块能够获取文件和目录的信息,而 shutil 则包含一些高级的文件操作函数。
import os
import shutil
步骤二:定义目标文件夹和文件名格式
我们需要先定义一个目标文件夹,以及文件名的格式,这些都是我们自己定义的。目标文件夹可以是任意路径,不过一定要确保该路径存在。例如,我们可以将目标文件夹定为当前脚本所在的文件夹,并以 file_
作为文件名前缀,以 .txt
为文件后缀,编号从 1
开始。
dir_path = './' # 目标文件夹路径
file_prefix = 'file_' # 文件名前缀
file_suffix = '.txt' # 文件名后缀
file_num = 1 # 文件编号
步骤三:获取最大的文件编号
我们需要获取已经存在文件中最大的编号,以便于在其基础上进行新增加的文件编号。这里可以借助 os 模块中的 listdir
和 path.join
等函数实现。
if os.path.exists(dir_path):
for filename in os.listdir(dir_path):
if filename.startswith(file_prefix) and filename.endswith(file_suffix):
# 已存在的文件中最大编号
file_num = max(file_num, int(filename[len(file_prefix): -len(file_suffix)]))
步骤四:生成新的文件名并保存文件
有了最大编号之后,我们就可以生成新的文件名并保存文件了。在这里,我们可以使用 Python 的 f-string 进行字符串的格式化,从而实现文件名的自动递增。
new_file_name = f"{file_prefix}{file_num+1}{file_suffix}"
with open(os.path.join(dir_path, new_file_name), 'w') as f:
f.write('Hello world!')
这里我们写了一个带有 Hello world!
内容的新文件。当然,这部分内容可以根据实际需要进行修改。
示例一:从一定范围内递增保存文件
现在,假设我们要同时完成保存 100 个文件的操作。我们可以借助循环语句,完成这个过程。以下是实现的示例代码:
import os
dir_path = './' # 目标文件夹路径
file_prefix = 'file_' # 文件名前缀
file_suffix = '.txt' # 文件名后缀
file_num = 1 # 文件编号
if os.path.exists(dir_path):
for filename in os.listdir(dir_path):
if filename.startswith(file_prefix) and filename.endswith(file_suffix):
# 已存在的文件中最大编号
file_num = max(file_num, int(filename[len(file_prefix): -len(file_suffix)]))
for i in range(100):
new_file_name = f"{file_prefix}{file_num+1}{file_suffix}"
with open(os.path.join(dir_path, new_file_name), 'w') as f:
f.write('Hello world!')
file_num += 1
这里,我们使用了一个 for
循环,循环次数为 100,表示要保存 100 个文件。在循环中,我们先进行编号的获取,然后递增编号,生成新的文件名,以及写入文件内容。
示例二:按照一定规则递增保存文件
在有些场景下,我们需要根据一定的规则来进行文件名的递增。例如,我们要保存拍摄的照片,以拍摄时间为文件名。这时,我们可以借助 Python 的一些库函数,完成这个过程。以下是示例代码:
import os
import datetime
dir_path = './' # 目标文件夹路径
file_prefix = 'photo_taken_' # 文件名前缀
file_suffix = '.jpg' # 文件名后缀
file_num = 1 # 文件编号
if os.path.exists(dir_path):
for filename in os.listdir(dir_path):
if filename.startswith(file_prefix) and filename.endswith(file_suffix):
# 已存在的文件中最大编号
file_num = max(file_num, int(filename[len(file_prefix): -len(file_suffix)]))
now = datetime.datetime.now()
new_file_name = f"{file_prefix}{now.strftime('%Y%m%d%H%M%S')}{file_suffix}"
with open(os.path.join(dir_path, new_file_name), 'wb') as f:
f.write(b'content')
这里,我们首先引入了 datetime 库函数,并获取了当前的时间。在生成新的文件名时,我们使用了当前时间的各个部分,并且将其格式化。其中,%Y
表示四位数的年,%m
表示两位数的月,%d
表示两位数的日,%H
表示两位数的小时,%M
表示两位数的分钟,%S
表示两位数的秒。通过这些组合,我们可以得到一个形如 photo_taken_20220213152030.jpg
的文件名,它是基于当前时间的格式化而生成的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现写数字文件名的递增保存文件方法 - Python技术站