2015-12-12 72 views
3

初學者問題:我試圖重命名目錄中的所有.xlsx文件。我明白如何將字符串中的字符替換爲另一個字符,但如何刪除?更具體地說,我在一個目錄中有多個文件:0123_TEST_01,0456_TEST_02。等我試圖刪除文件名中的前綴,這將導致以下:TEST_01,TEST_02。Python重命名目錄中的多個文件

我試圖使用os.rename並將其放入一個循環,但我不確定是否應該使用len()和一些數學嘗試並返回正確的命名約定。下面的代碼是我目前的立場。請讓我知道,如果這沒有意義。謝謝。

import os 
import shutil 
import glob 

src_files = os.listdir('C:/Users/acars/Desktop/b') 

for file_name in src_files: 
     os.rename(fileName, filename.replace()) 
+0

使用'.find()'查找位置'_' – blckbird

回答

1

上下劃線就分裂一次,並使用第二個元素,水珠也可以找到所有你xlsx文件你返回完整路徑

from os import path, rename 
from glob import glob 

src_files = glob('C:/Users/acars/Desktop/b/*.xlsx') 
pth = 'C:/Users/acars/Desktop/b/' 

for file_name in src_files:   
    rename(file_name, path.join(pth, path.basename(file_name).split("_",1)[1]) 

如果你只有XLSX文件和你沒有使用你glob的需要加入的路徑:

from os import path, rename 
from glob import glob 


pth = 'C:/Users/acars/Desktop/b' 
src_files = os.listdir(pth) 

for file_name in src_files: 
    new = file_name.split("_", 1)[1] 
    file_name = path.join(pth, file_name) 
    rename(file_name, path.join(pth, new)) 
+0

謝謝你的迴應。似乎讓我更接近,但我仍然看到一些問題,我試圖'從os導入路徑,名稱'告訴我os沒有定義,所以我只是導入所有的操作系​​統。該程序運行沒有錯誤,但似乎有移動文件,因爲它們不再在目錄中,然後,當我重新創建文檔並重新運行時,它說它不能創建一個文件,因爲它已經存在,就好像它在工作,我看不到重命名的文件在B目錄。所有的幫助表示讚賞! – AndrewC10

+0

@ AndrewC10,我應該使用rename而不是os.rename,因爲我從os導入了重命名。 OsError因爲文件存在,所以它一定是成功的。當你運行代碼時,'print path.join(pth,new)'輸出是什麼? –

+0

對不起,也許我應該澄清。我用你的頂級版本的代碼。我沒有導入glob。它告訴我file_name沒有被定義。下面是我跑的。我試着定義文件級別的路徑並停在目錄級別。 pth ='C:/ Users/acars/Desktop/b/*。xlsx' new = file_name.split(「_」,1)[1] print path.join(pth,new) – AndrewC10

1

只需通過下劃線拆分文件名,忽略第一部分,然後重新加入。

>>> file_name = '0123_TEST_01' 

>>> '_'.join(file_name.split('_')[1:]) 
'TEST_01' 

您的代碼將是這樣的:

for file_name in src_files: 
    os.rename(file_name, '_'.join(file_name.split('_')[1:])) 
+0

它正在拋出os.rename(file_name,「_」。join(file_name.split(「_」)[1:]) ) WindowsError:[錯誤2]系統找不到指定的文件。因爲它是嘗試訪問b文件夾中的文件,所以我的src_files位置高了嗎? – AndrewC10

+0

@ Andrec10這是因爲你必須給文件的絕對路徑一個os.rename,保存在一個變量中,'path'例如,你正在處理的文件夾,並執行'os.rename(os.path。 join(path,file_name),os.path.join(path,'_'。join(file_name.split('_')[1:]))' – Copperfield