この正規表現は、正確にこの形式で何かを見つける文字列を見つけることになっています:
201308 - (82608) - MAC 2233-007-Methods of Calculus - Lastname, Lee.txt
唯一の注意点は、最後のハイフンと .txt の間の最後の部分であり、その直前のコース名はどちらも可変数の文字 (インストラクター名とコース名) にすることができます。他のすべては、その形式でその数の文字を持ちます (その数のスペースとハイフンで正確に区切られた int 番号、またはすべて大文字の正確なコースプレフィックスのいずれか)。
正規表現が実際に行っていることは、何も見つけていないことです。括弧をエスケープしようとせずに、いくつかのファイルをキャッチしていましたが、今は灘. 明らかに正規表現が完成しておらず、その一部をテストしているため、 re.search
代わりに使用しています。re.match
import re, os, sys, shutil
def readDir(path1):
return [ f for f in os.listdir(path1) if os.path.isfile(os.path.join(path1,f)) ]
def files(dir1,term,path1):
match2 = []; stillWrong = []#; term = str(term)
for f in dir1:
result = re.search(term + "\s\b\s\(\d{5}\)\s\b\s\w{3}\s\d{4}\b\d{3}[a-z\A-Z]+\s\b\s[A-z\a-z]+\b\s[A-Z\a-z]+ .txt",f)
if result: match2.append(f)
else: stillWrong.append(f)
#print "split --- ",os.path.split(f)
##else: os.rename(path1+'\\'+f, path1+'\\'+'@ '+f); stillWrong.append(f)
print "f ---- ",f
return match2, stillWrong
term = "201308"; src = "testdir1"; dest = "testdir2"
print files(readDir(dest),term,dest)
これは(明らかに)間違っています:
>>>
f ---- @ @ @ @ @ @ 123 abc - a-1 - b-2.txt
f ---- @ @ @ @ @ @ 201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt
f ---- @ @ @ @ @ @ 201308 abc 123.txt
f ---- @ @ @ @ @ @ 201308-(12345) - Abc 2233-007-course Name - last, first.txt
f ---- @ @ @ @ @ @ 45-12 - xyz - mno - 123-pqr-tuv-456.txt
f ---- @ @ @ @ @ @ @ @ @ 201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt
f ---- @ @ @ @ @ @ @ @ @ 201308 abc 123.txt
f ---- @ @ @ @ @ @ @ @ @ 201308-(12345) - Abc 2233-007-course Name - last, first.txt
f ---- @ @ @ @ @ @ @ @ @ @ 123 abc - a-1 - b-2.txt
f ---- @ @ @ @ @ @ @ @ @ @ 45-12 - xyz - mno - 123-pqr-tuv-456.txt
f ---- @ @ @ @ @ @ @ @ @ @ @ xxxxx xxxxx xxxxx 123 abc - a-1 - b-2.txt
f ---- @ @ @ @ @ @ @ @ @ @ @ xxxxx xxxxx xxxxx 45-12 - xyz - mno - 123-pqr-tuv-456.txt
([], ['@ @ @ @ @ @ 123 abc - a-1 - b-2.txt', '@ @ @ @ @ @ 201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt', '@ @ @ @ @ @ 201308 abc 123.txt', '@ @ @ @ @ @ 201308-(12345) - Abc 2233-007-course Name - last, first.txt', '@ @ @ @ @ @ 45-12 - xyz - mno - 123-pqr-tuv-456.txt', '@ @ @ @ @ @ @ @ @ 201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt', '@ @ @ @ @ @ @ @ @ 201308 abc 123.txt', '@ @ @ @ @ @ @ @ @ 201308-(12345) - Abc 2233-007-course Name - last, first.txt', '@ @ @ @ @ @ @ @ @ @ 123 abc - a-1 - b-2.txt', '@ @ @ @ @ @ @ @ @ @ 45-12 - xyz - mno - 123-pqr-tuv-456.txt', '@ @ @ @ @ @ @ @ @ @ @ xxxxx xxxxx xxxxx 123 abc - a-1 - b-2.txt', '@ @ @ @ @ @ @ @ @ @ @ xxxxx xxxxx xxxxx 45-12 - xyz - mno - 123-pqr-tuv-456.txt'])
>>>
ご覧のとおり、match2[]
リストには何もありません (興味がある場合、これらは 2 番目のリストのファイル名ですが、1 番目のリストには関連する一致が保持されています)。私はPythonと正規表現を独学していますが、うまくいきません。これら(および正規表現チュートリアル)を試しましたが、この場合は役に立たなかったようです:
コメントアウトされているのはすべてのものですが、とにかくコメントされる前は機能しませんでし@
た。os.rename
初心者レベルのプログラマなら誰でも数分でこれを終わらせることができると確信していますが、プロがこの質問に出くわし、1分を割いてくれるなら、それも素晴らしいことです.
編集: 使用されるファイル名のリスト (生産リストは明らかにはるかに長いです):
201308-(12345) - Abc 2233-007-course Name - last, first.txt
201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt
@ @ @ @ @ @ 201308 abc 123.txt
@ @ @ @ @ @ 123 abc - a-1 - b-2.txt
@ @ @ @ @ @ 45-12 - xyz - mno - 123-pqr-tuv-456.txt
@ @ @ @ @ @ @ @ @ 201308-(12345) - Abc 2233-007-course Name - last, first.txt
@ @ @ @ @ @ @ @ @ 201308 abc 123.txt
@ @ @ @ @ @ @ @ @ 201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt
@ @ @ @ @ @ @ @ @ @ 123 abc - a-1 - b-2.txt
@ @ @ @ @ @ @ @ @ @ 45-12 - xyz - mno - 123-pqr-tuv-456.txt
@ @ @ @ @ @ @ @ @ @ @ xxxxx xxxxx xxxxx 123 abc - a-1 - b-2.txt
@ @ @ @ @ @ @ @ @ @ @ xxxxx xxxxx xxxxx 45-12 - xyz - mno - 123-pqr-tuv-456.txt
45-12 - xyz - mno - 123-pqr-tuv-456.txt
123 abc - a-1 - b-2.txt
201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.txt
201308 abc 123.txt
201308-(12345) - Abc 2233-007-course Name - last, first.txt