2016-12-06 58 views
1

我已經看到了基本的Python代碼的文件名替換目錄中的最後13個字符的字符串,但他們始終是已知的字符串,但你會如何刪除隨機字符一定的長度?去除從前面四個字符和一個文件名

會這樣嗎?

newFileName = file.replace([-5:], "") 

正如我試圖從文件名中刪除最後五個字符而不刪除擴展名。

這裏有一個更新: 我試圖做到這一點:

DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml 

CIWS15-AAAA-A00-00-0000-00A-018A-D.xml 

從最終刪除DMC-和_014-00_EN美。

我需要添加這將修復的文件目錄的代碼。

+4

只是切片字符串:newFileName =文件[0:-5] –

+0

@MaximilianPeters,是不是會切掉擴展? – Steven

+2

如果你需要保持擴展,使用RFIND:newFileName =文件[0:file.rfind(「」)] –

回答

2

這個問題(如果我理解正確的話)有明確的分離。刪除擴展名,從開頭和結尾刪除X個字符,然後再次添加擴展名以獲得最終答案。

import os 

oldFileName = 'xxxx-filename-xxxxx.XML' 
# remove n chars in beginning, m chars at end 
n = 5 
m = 6 
name, ext = os.path.splitext(oldFileName) 
# splice away the chars, and add the extension 
newFileName = '{}{}'.format(name[0:-m][n:], ext) 
# newFileName == 'filename.XML' 

所以你的情況,你可以使用n=4m=13

如果你不知道長度,但你知道你想要的一切都包括在第一個下劃線之後,並且同樣地在第一個下劃線後面(這意味着在正常文件名中不能用下劃線或它的第一部分),這也將工作:

import os 

oldFileName = 'DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml' 
name, ext = os.path.splitext(oldFileName) 
newFileName = '{}{}'.format(name[name.index('-')+1:name.index('_')], ext) 
# newFileName == 'CIWS15-AAAA-A00-00-0000-00A-018A-D.xml' 

即使該模式是別的東西,而是有規律可循的,你可以編寫與之相匹配的,像我這裏。

+0

我已經更新了這個問題,以便更具體,以便您可以根據需要對您的答案進行必要的更改。感謝您的幫助 – Steven

+0

我已經稍微更新了我的答案,但我相信我的解決方案已足夠適用於您的案例,如果長度已修復。然而,更好的解決方案似乎是過濾第一個短劃線,以及第一個下劃線之後的所有內容,如果這代表格式。 – Matthias

+0

這工作,是美麗的代碼。謝謝! – Steven

0

它不是很好,但我希望這對你的作品壽

如果你知道你想要重命名所有具有相同長度的文件,你可以嘗試:

>>>file = 'DMC-CIWS15-AAAA-A00-00-0000-00A-018A-D_014-00_EN-US.xml' 
>>>ext = file[51:] 
>>>newFile = file[4:38]+ext 

在打印NEWFILE你現在有:

>>>print(newFile) 
CIWS15-AAAA-A00-00-0000-00A-018A-D.xml 
相關問題