Python3 代码优化:对目录下文件重命名,移除以 'h_' 开头的文件中的数字和 'h_'

本文提供 Python3 代码示例,用于优化目录下文件重命名操作。该代码能够识别以 'h_' 开头的文件,并移除其名称中的数字和 'h_'。同时,代码还对其他文件进行适当的重命名处理,确保最终输出文件名称符合预期格式。

原始代码:

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

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, os.path.splitext(os.path.basename(L[0]).replace('00', '-', 1))[0][:-1].upper() + '.mp4')}''
)

# 执行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.basename(mp4_file)
    new_file_name = file_name[file_name.find(file_name.lstrip('0123456789')[0]):]
    os.rename(mp4_file, os.path.join(output_dir, new_file_name))

修改后的代码:

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

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, os.path.splitext(os.path.basename(L[0]).replace('00', '-', 1))[0][:-1].upper() + '.mp4')}''
)

# 执行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.basename(mp4_file)
    if file_name.startswith('h_'):
        new_file_name = file_name[len('h_'):].lstrip('0123456789')
        os.rename(mp4_file, os.path.join(output_dir, new_file_name))
    else:
        new_file_name = file_name[file_name.find(file_name.lstrip('0123456789')[0]):]
        os.rename(mp4_file, os.path.join(output_dir, new_file_name))

代码解析:

  1. 使用 startswith() 方法判断文件名称是否以 'h_' 开头。
  2. 如果文件名称以 'h_' 开头,则使用 file_name[len('h_'):] 截取字符串,从 'h_' 之后开始截取。
  3. 使用 lstrip('0123456789') 方法移除字符串开头的数字。
  4. 如果文件名称不以 'h_' 开头,则使用原始代码中的逻辑进行重命名。

代码示例:

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

  • h_123abc.mp4
  • h_456def.mp4
  • abc123.mp4
  • def456.mp4

执行代码后,目录下的文件将被重命名为:

  • abc.mp4
  • def.mp4
  • abc123.mp4
  • def456.mp4

总结:

该代码通过简单的判断和字符串处理,实现了对目录下文件进行智能重命名,有效地移除以 'h_' 开头的文件中的数字和 'h_'。该代码逻辑清晰,易于理解和维护,可用于处理各种类似的重命名需求。

Python3 代码优化:对目录下文件重命名,移除以 'h_' 开头的文件中的数字和 'h_'

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

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