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))

代码功能:

  1. 获取 output_dir 目录下的所有 .mp4 文件名。
  2. 删除文件名中的 h_00h_100h_200h_400h_900 前缀和数字。
  3. 保留文件名中最后一个字母之前的部分作为新的文件名。

代码说明:

  • natsorted 用于对文件列表进行自然排序。
  • os.path.splitext 用于拆分文件名和扩展名。
  • os.path.basename 用于获取文件名。
  • os.path.dirname 用于获取文件所在的目录。
  • os.path.join 用于拼接路径。
  • os.rename 用于重命名文件。

代码示例:

假设 output_dir 目录下存在以下文件:

  • h_00_abc_123.mp4
  • h_100_def_456.mp4
  • h_200_ghi_789.mp4
  • h_400_jkl_101.mp4
  • h_900_mno_111.mp4

执行代码后,文件名将被修改为:

  • abc.mp4
  • def.mp4
  • ghi.mp4
  • jkl.mp4
  • mno.mp4

使用说明:

  1. 将代码中的 dir_pathoutput_dir 修改为实际的路径。
  2. 运行代码,即可完成批量修改文件名操作。

注意:

  • 代码只修改了文件名,不会修改文件内容。
  • 在修改文件名之前,建议备份原始文件。
Python 批量修改文件命名,删除特定前缀和数字,保留最后一个字母之前的部分

原文地址: https://www.cveoy.top/t/topic/nC72 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录