Python 批量修改文件命名,删除特定前缀和数字,保留最后一个字母之前的部分
Python 批量修改文件命名,删除特定前缀和数字,保留最后一个字母之前的部分
import os
import glob
from natsort import natsorted
dir_path = r'E:\home\up'
output_dir = r'E:\home\up\1'
# 当前文件夹下的所有mp4路径
L = []
for root, dirs, files in os.walk(dir_path):
files = natsorted(files)
for file in files:
if os.path.splitext(file)[1] == '.mp4':
file_path = os.path.join(root, file)
L.append(file_path)
# 生成ffmpeg命令
commands = []
for l in L:
ts_file = os.path.join(os.path.dirname(l), os.path.splitext(os.path.basename(l))[0] + '.ts')
commands.append(f'ffmpeg -i \'{l}\' -vcodec copy -acodec copy -bsf:v h264_mp4toannexb \'{ts_file}\'')
# 获取文件名 + '.mp4'
new_file_name = os.path.splitext(os.path.basename(L[0]))[0][1:] + '.mp4'
concat_command = (
f'ffmpeg -i \'concat:{{\'|\'.join([os.path.join(os.path.dirname(l), os.path.splitext(os.path.basename(l))[0] + '.ts') for l in L])}}\' '
'-acodec copy -vcodec copy -bsf:a aac_adtstoasc '
f'\'{os.path.join(output_dir, new_file_name)}\''
)
# 执行ffmpeg命令
for command in commands:
os.system(command)
os.system(concat_command)
# 删除ts文件
for ts_file in glob.glob(os.path.join(dir_path, '*.ts')):
os.remove(ts_file)
# 输出文件命名
for mp4_file in glob.glob(os.path.join(output_dir, '*.mp4')):
file_name = os.path.splitext(os.path.basename(mp4_file))[0][1:]
file_name = file_name.replace('h_00', '-').replace('h_100', '').replace('h_200', '').replace('h_400', '').replace('h_900', '')
file_name = file_name.strip('0123456789.-_')
# 截取到最后一个英文字母之前
new_file_name = ''
for i in range(len(file_name)-1, -1, -1):
if file_name[i].isalpha():
new_file_name = file_name[:i+1]
break
new_file_name += '.mp4'
os.rename(mp4_file, os.path.join(output_dir, new_file_name))
代码功能:
- 获取
output_dir目录下的所有.mp4文件名。 - 删除文件名中的
h_00、h_100、h_200、h_400、h_900前缀和数字。 - 保留文件名中最后一个字母之前的部分作为新的文件名。
代码说明:
natsorted用于对文件列表进行自然排序。os.path.splitext用于拆分文件名和扩展名。os.path.basename用于获取文件名。os.path.dirname用于获取文件所在的目录。os.path.join用于拼接路径。os.rename用于重命名文件。
代码示例:
假设 output_dir 目录下存在以下文件:
h_00_abc_123.mp4h_100_def_456.mp4h_200_ghi_789.mp4h_400_jkl_101.mp4h_900_mno_111.mp4
执行代码后,文件名将被修改为:
abc.mp4def.mp4ghi.mp4jkl.mp4mno.mp4
使用说明:
- 将代码中的
dir_path和output_dir修改为实际的路径。 - 运行代码,即可完成批量修改文件名操作。
注意:
- 代码只修改了文件名,不会修改文件内容。
- 在修改文件名之前,建议备份原始文件。
原文地址: https://www.cveoy.top/t/topic/nC72 著作权归作者所有。请勿转载和采集!