在工作中有時候會遇到多個檔名格式不對的情況,需要一一修改,例如從test1.py,test2.py,…,testn.py改為test_1.py,test_2.py,…,test_n.py的情況,如果檔案數量少手動改改就算了,但是檔案多的話,就不想手動改了,我現在本著重複的事情盡量用**實現,就想著肯定可以通過python來批量修改的,然後就開始分析:
要批量修改檔名,首先得獲取所有的檔名
批量替換少部分檔名需要把想要的部分提取出來,然後拼接成新的檔名
實行檔名替換
按照這3步,首先要獲取所有的檔名,用到os.listdir()方法,不傳引數是獲取當前檔案路徑下的所有檔案和資料夾列表
import os
print
(os.listdir(
))
輸出結果:
d:\github\auto-repeat\.venv\scripts\python.exe d:/github/auto-repeat/replace_filename/main.py
['main.py', 'test1.py', 'test2.py', 'test3.py', '__init__.py']
本來我想的操作是通過for迴圈提出出帶test的檔案,然後通過「.」把testn和後面的py分開,然後用切片把test和後面的數字分開,最後再通過拼接字元的形式改為test_n.py的新檔名形式,但是今天寫的時候突然想到另乙個方法,那就是用想要替換的字元把檔名切開,然後通過用join方法用替換後的字元「test_n」將切開的列表拼接起來,這樣比較簡單
import os
print
(os.listdir())
file_list = os.listdir(
)for
file
in file_list:
if'test'
infile
:print
(file
.split(
'test'))
new_file =
'test_'
.join(
file
.split(
'test'))
print
(new_file)
輸出結果:
d:\github\auto-repeat\.venv\scripts\python.exe d:/github/auto-repeat/replace_filename/main.py
['main.py', 'test1.py', 'test2.py', 'test3.py', '__init__.py']
['', '1.py']
test_1.py
['', '2.py']
test_2.py
['', '3.py']
test_3.py
process finished with exit code 0
可以看到替換後的檔名已經被賦值到new_file變數了,剩餘最後一步就是替換檔名,用os.rename()方法將舊檔名和新檔名作為引數傳遞進去就可以了。
最終**如下:
import os
# 獲取當前資料夾下的所有檔案和資料夾列表
file_list = os.listdir(
)for
file
in file_list:
if'test'
infile
:# 用test_替換test
new_file =
'test_'
.join(
file
.split(
'test'))
# 檔名替換
os.rename(
file
, new_file)
有時修改還需要篩選只修改檔案
就用到os.path.isfile(file)
還有可能需要判斷檔案字尾
file.endswith(』.py』)
python批量修改檔名
修改前 flv檔案是從rar檔案中解壓出來的。由於英文不好,並且有的flv檔案的名字並不十分清晰明了,所以打算將flv檔案名字改為相應的rar檔案的名字。僅供參考,新手勿噴 主要使用了python中的re 正規表示式 和os模組中的函式。coding gb2312 import os import ...
python批量修改檔名
最近工作需要給大量檔案改名。恰巧,本人又在自學python,所以就想用python寫個程式來自動修改相應的檔名。下面就通過 來介紹一下我的做法吧。先說一下,我的工作要求是,在所有的資料檔案前加上資料所在資料夾的名字,改完名字後把所有的檔案彙總到乙個新的資料夾。我要處理的檔案有的存放在次最後層目錄 有...
Python 批量修改檔名
需要將收到的 bmp 檔案按名稱順序排列,而檔名本來的樣式類似於image12.bmp,現需要修改為12.bmp,由於檔案數量較大,所以產生了利用 python 修改的想法,雖然 很簡單,但還算成功。import os 檔案位址 path c users 迴圈處理資料夾內的每個檔案 forfile ...