通過(guò)Python腳本批量復(fù)制并規(guī)范命名視頻文件
一、問(wèn)題場(chǎng)景:雜亂的視頻文件名
在日常工作和學(xué)習(xí)中,我們經(jīng)常會(huì)遇到這樣的文件命名情況:
[1]基礎(chǔ)教程.mp4
[23]進(jìn)階技巧.mp4
[156]項(xiàng)目實(shí)戰(zhàn).mp4
這種包含數(shù)字編號(hào)的命名方式雖然直觀,但存在兩個(gè)明顯問(wèn)題:
- 數(shù)字位數(shù)不一致,排序時(shí)會(huì)出現(xiàn)順序錯(cuò)亂
- 需要修改文件名但必須保留原始文件
本文將介紹如何通過(guò)Python腳本批量復(fù)制并規(guī)范命名視頻文件,實(shí)現(xiàn):
- 自動(dòng)補(bǔ)齊4位數(shù)字編號(hào)
- 保留原始文件不修改
- 智能識(shí)別有效文件
- 完整復(fù)制文件屬性
二、完整解決方案
import os import re import shutil def rename_and_copy_mp4_files(source_dir, target_dir): """智能重命名并復(fù)制視頻文件 Args: source_dir (str): 源目錄路徑 target_dir (str): 目標(biāo)目錄路徑 """ # 創(chuàng)建目標(biāo)目錄(自動(dòng)處理已存在情況) os.makedirs(target_dir, exist_ok=True) # 遍歷源目錄所有文件 for filename in os.listdir(source_dir): # 使用正則表達(dá)式解析文件名 pattern_match = re.match(r'\[(\d+)\](.+)\.(mp4|avi|mov)$', filename, re.IGNORECASE) if pattern_match: # 提取文件名組件 file_number = pattern_match.group(1) file_content = pattern_match.group(2).strip() file_ext = pattern_match.group(3).lower() # 格式化數(shù)字編號(hào)(4位補(bǔ)零) formatted_number = file_number.zfill(4) # 構(gòu)建新文件名 new_filename = f"{formatted_number}_{file_content}.{file_ext}" # 構(gòu)建完整路徑 src_path = os.path.join(source_dir, filename) dst_path = os.path.join(target_dir, new_filename) # 執(zhí)行帶元數(shù)據(jù)的復(fù)制操作 shutil.copy2(src_path, dst_path) print(f"成功處理:{filename} → {new_filename}") else: print(f"跳過(guò)非標(biāo)準(zhǔn)文件:{filename}") if __name__ == "__main__": # 配置路徑(根據(jù)實(shí)際情況修改) SOURCE_DIR = r"E:\video_source" TARGET_DIR = r"E:\video_organized" rename_and_copy_mp4_files(SOURCE_DIR, TARGET_DIR)
三、關(guān)鍵技術(shù)解析
1. 智能路徑處理
os.makedirs(target_dir, exist_ok=True)
exist_ok=True
參數(shù)確保:
- 目標(biāo)目錄不存在時(shí)自動(dòng)創(chuàng)建
- 目錄已存在時(shí)不報(bào)錯(cuò)
- 自動(dòng)處理多級(jí)目錄創(chuàng)建
2. 精準(zhǔn)文件名匹配
r'\[(\d+)\](.+)\.(mp4|avi|mov)$'
正則表達(dá)式分解:
- \[(\d+)\] 捕獲方括號(hào)內(nèi)的數(shù)字
- (.+) 捕獲任意長(zhǎng)度內(nèi)容(至少1個(gè)字符)
- (mp4|avi|mov)$ 支持多種視頻格式
- re.IGNORECASE 忽略大小寫(xiě)
支持匹配的格式:
- [123] 教程.mp4
- [45]advanced.MOV
- [6]測(cè)試文件.AVI
3. 數(shù)字格式化
file_number.zfill(4)
轉(zhuǎn)換示例:
- “1” → “0001”
- “23” → “0023”
- “156” → “0156”
4. 安全文件復(fù)制
shutil.copy2(src, dst)
與普通復(fù)制的區(qū)別:
- 保留原始創(chuàng)建時(shí)間
- 保留最后修改時(shí)間
- 保留文件權(quán)限設(shè)置
- 保留其他元數(shù)據(jù)
四、使用指南
準(zhǔn)備步驟
- 安裝Python 3.6+環(huán)境
- 創(chuàng)建腳本文件
video_organizer.py
- 準(zhǔn)備測(cè)試目錄(建議先進(jìn)行測(cè)試)
配置示例
# Windows系統(tǒng)示例 SOURCE_DIR = r"E:\training_videos" TARGET_DIR = r"D:\sorted_videos" # macOS/Linux示例 # SOURCE_DIR = "/Users/username/Videos/source" # TARGET_DIR = "/Volumes/external_drive/sorted_videos"
執(zhí)行效果
原始文件 | 生成文件 |
---|---|
[1]介紹.mp4 | 0001_介紹.mp4 |
[23]基礎(chǔ)課.avi | 0023_基礎(chǔ)課.avi |
[156]項(xiàng)目實(shí)戰(zhàn).mov | 0156_項(xiàng)目實(shí)戰(zhàn).mov |
五、高級(jí)擴(kuò)展建議
1. 添加進(jìn)度提示
# 在循環(huán)開(kāi)始前添加 total_files = len([f for f in os.listdir(source_dir) if f.endswith(('.mp4', '.avi', '.mov'))]) processed = 0 # 在處理成功時(shí)添加 processed += 1 print(f"進(jìn)度:{processed}/{total_files} ({processed/total_files:.1%})")
2. 防覆蓋機(jī)制
if os.path.exists(dst_path): base, ext = os.path.splitext(new_filename) counter = 1 while os.path.exists(dst_path): new_filename = f"{base}_{counter}{ext}" dst_path = os.path.join(target_dir, new_filename) counter += 1
3. 多線程加速
from concurrent.futures import ThreadPoolExecutor def process_file(filename): # 原處理邏輯 with ThreadPoolExecutor(max_workers=4) as executor: executor.map(process_file, os.listdir(source_dir))
六、注意事項(xiàng)
路徑格式驗(yàn)證
• Windows路徑使用反斜杠r"E:\path"
• 其他系統(tǒng)使用正斜杠"/path/to/files"
權(quán)限問(wèn)題
• 確保對(duì)源目錄有讀取權(quán)限
• 確保對(duì)目標(biāo)目錄有寫(xiě)入權(quán)限特殊字符處理
• 自動(dòng)跳過(guò)包含非法字符的文件
• 可添加字符過(guò)濾邏輯:
file_content = re.sub(r'[<>:"/\\|?*]', '', file_content)
性能優(yōu)化
• 萬(wàn)級(jí)以上文件建議添加:
? 進(jìn)度條顯示
? 錯(cuò)誤日志記錄
? 斷點(diǎn)續(xù)傳功能
七、總結(jié)
通過(guò)這個(gè)Python腳本,我們實(shí)現(xiàn)了:
- 批量處理視頻文件
- 智能規(guī)范編號(hào)格式
- 安全保留原始文件
- 快速部署使用
擴(kuò)展應(yīng)用場(chǎng)景:
- 整理教學(xué)視頻庫(kù)
- 規(guī)范監(jiān)控錄像存檔
- 管理影視素材資源
- 自動(dòng)化測(cè)試視頻處理
TIP:建議將此腳本與定時(shí)任務(wù)結(jié)合,打造自動(dòng)化文件管理系統(tǒng)。歡迎在評(píng)論區(qū)分享你的使用經(jīng)驗(yàn)或提出改進(jìn)建議!
以上就是通過(guò)Python腳本批量復(fù)制并規(guī)范命名視頻文件的詳細(xì)內(nèi)容,更多關(guān)于Python復(fù)制并重命名視頻文件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Gradio機(jī)器學(xué)習(xí)模型快速部署工具quickstart
這篇文章主要為大家介紹了Gradio機(jī)器學(xué)習(xí)模型快速部署工具quickstart,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04python實(shí)現(xiàn)Dijkstra算法的最短路徑問(wèn)題
這篇文章主要介紹了python實(shí)現(xiàn)Dijkstra算法的最短路徑問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06Python實(shí)現(xiàn)樹(shù)莓派攝像頭持續(xù)錄像并傳送到主機(jī)的步驟
這篇文章主要介紹了Python實(shí)現(xiàn)樹(shù)莓派攝像頭持續(xù)錄像并傳送到主機(jī)的步驟,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-11-11基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法
今天小編就為大家分享一篇基于pandas將類別屬性轉(zhuǎn)化為數(shù)值屬性的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07解決json.decoder.JSONDecodeError: Expecting value:&n
這篇文章主要介紹了解決json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)錯(cuò)誤,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04python 迭代器和iter()函數(shù)詳解及實(shí)例
這篇文章主要介紹了python 迭代器和iter()函數(shù)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-03-03Appium Python自動(dòng)化測(cè)試之環(huán)境搭建的步驟
這篇文章主要介紹了Appium Python自動(dòng)化測(cè)試之環(huán)境搭建的步驟,以32位的Windows 7操作系統(tǒng)為例介紹Appium+Python的環(huán)境搭建步驟,感興趣的小伙伴們可以參考一下2019-01-01