问题背景
因项目需要,有个需求是将某目录下各文件添加特定格式的后缀标记,为提高效率,遂编写此自动化脚本。读者可根据自身需要进行修改。
实现思路
前提:码流名字中含有声道数、01、码率信息,且命名格式固定
功能:利用已经生成好的码流及其名字,生成对应的解码指令和md5sum
编码思路:
- 获取文件名字
- 统一文件命名格式,
ch_xx_bitrate_0/1.bit
- 从文件名中获取
ch/bitrate/01
信息 - 根据输入要求,连接新的文件名字符串
- 利用rename函数进行重命名
Python代码
前置知识:
import os
, 导入系统文件操作包os.listdir(文件夹路径)
,获取指定目录下的所有子目录和文件名os.chdir(文件夹路径)
,切换到当前目录下os.rename(原文件名,新文件名)
,对文件或目录改名
具体代码:
# -*- coding: utf-8 -*-
''' @Time : 2021年12月31日 '''
import os
# 批量改名函数
def rename_file(path):
file_list = os.listdir(path)
# 必须先切换到当前目录下,os.rename才能找到对应文件去改名
os.chdir(path)
for old_name in file_list:
# # 改2声道
# new_name = "2_" + old_name
# 改1-channels
tmp_name = old_name.split('-')[1]
print(tmp_name)
ch = old_name.split('_')[1]
print(ch)
new_name = ch + '_' + tmp_name
# 改名
os.rename(old_name, new_name)
return
if __name__ == '__main__':
path = r"D:\sequences\input"
outPath = r"D:\sequences\output"
inputBatPath = r"D:\sequences\bat"
pathRename = r"D:\sequences\files"
namelist = os.listdir(path)
# 批量重命名文件
# rename_file(pathRename)
with open(os.path.join(outPath, "file_list_test.txt"), "w", encoding="UTF-8") as f:
f.write('\n'.join(namelist[:-1]))
all_test_list = []
all_md5sum_list = []
for name in namelist:
# 获取信息
ch = name.split('_')[0]
isSetereo = name.split('_')[-1]
isSetereo = isSetereo[:-4] #左闭右开,去掉.bit
bitrate = name.split('_')[-2]
# 连接指令
dec_cmd = '{0} {1} {2} /mnt/data/{3} '.format(ch, isSetereo, bitrate, name)
md5_cmd = 'md5sum /mnt/data//{0}_out.wav '.format(name[:-4])
# 追加到输出数组
all_test_list.append(dec_cmd)
all_md5sum_list.append(md5_cmd)
with open(os.path.join(outPath, "test_list.txt"), "w", encoding="UTF-8") as f:
f.write('\n'.join(all_test_list))
with open(os.path.join(outPath, "md5sum_out.sh"), "w", encoding="UTF-8") as f:
f.write('\n'.join(all_md5sum_list))
参考资料
- 简书:Python修改文件名,link