2015-06-21 119 views
0

我正在重命名目錄中的所有文件,並使用正則表達式模式檢查是否有任何文件具有適當的文件名結構(我在www.rubular.com上雙重檢查了該模式,這似乎是正確的)。如果是這樣,它跳過重命名他的文件。以下代碼重命名該文件,無論它是否具有適當的文件名結構....我沒有看到它爲什麼不跳過該文件。在確定爲什麼是不工作的正則表達式可以理解的任何幫助:Python正則表達式模式

# Appropriate file name: P.002-night.jpg; File name to rename: bird.jpg 


import os, os.path 
import re 


def displaymatch(match): 
    if match is None: 
     return None 
    return '<Match: %r, groups=%r>' % (match.group(), match.groups()) 

sampledir = "c:\\Users\\Name\\Desktop\\New folder" 
os.chdir(sampledir) 
FileList = os.listdir(os.getcwd()) 


num = 000 

pattern = r"\w.\d{3}\-\w+.(jpg|Jpg|JPG)" 


for filename in FileList: 
    if displaymatch(re.match(pattern, filename)) != None: 
     pass 
    else: 
     os.rename(filename, "P." + str("{0:0=3d}".format(num)) + "-" + filename) 
     num+= 1 
+2

你必須在你的格局開始的'r'。另外,ruby是爲ruby設計的,你可以使用http://pythex.org作爲python的重新模塊。 –

+0

假設你的意思是說要成爲一個原始字符串('r「」'),而不是以r('「r」')開頭的字符串。你爲什麼使用'str.endswith' *和*'re.match'? – jonrsharpe

+0

嗯,卡西米爾有它。在python中定義正則表達式時,通常使用r_outside_字符串,這使得它成爲「原始字符串」,因此反斜槓轉義將更容易。你想'r'[a-zA-Z] \。\ d {3} \ - [a-zA-Z0-9] + \。(jpg | Jpg | JPG)「' –

回答

-1
pattern = r"\w.\d{3}\-\w+.(jpg|Jpg|JPG)" 


for filename in FileList: 
    if displaymatch(re.match(pattern, filename)) is None: 
     os.rename(filename, "P." + str("{0:0=3d}".format(num)) + "-" + filename) 
     num+= 1