このプログラムは、ディレクトリを調べて、(可能であれば) ファイル名を特定の形式の空白、ハイフンなどに修正します。この方法regexSubFixGrouping()
は、ファイル名で見つかった不適切な空白を適切な空白に変更します。メソッドcheckProper()
は、必要な形式を正確に示します。
適切な形式:
201308 - (82608) - MAC 2233-007-Methods of Calculus - Klingler, Lee.pdf
欠けている可能性のある最初の 4 つのハイフンも正規表現で挿入する必要があることを除いて、すべてがうまく機能します。現時点では、余分なハイフンについてはあまり心配していません。主に、最初の4つの不足しているハイフンのいずれかを挿入したいだけです(そして、空白などを修正する現在の機能をすべて維持します)。
方法:
def readDir(path1):
return [ f for f in os.listdir(path1) if os.path.isfile(os.path.join(path1,f)) ]
def checkProper(f,term):
return re.match(term + '\s-\s\(\d{5}\)\s-\s\w{3}\s\d{4}\w?-\d{3}-[^\.]+\s-\s[^\.]+\.txt', f)
def regexSubFixGrouping(f,term):
""" Much improved version of regexSubFix(). Corrects improper whitespace in filename """
return re.sub(term + r'\s*-\s*(\(\d{5}\))\s*-\s*(\w{3}\s\d{4}\w?-\d{3}\s*-\s*(?:[^.\s]|\b\s\b)+)\s*-\s*([^.]+\.pdf)$',
lambda match: term+' - {0} - {1} - {2}'.format(match.group(1),
re.sub(r'\s*-\s*', '-', match.group(2)),
match.group(3)) ,
f)
def properFiles(dir1,term,path1):
""" Main functionality. Goes through list of files in directory, separates good from bad and fixes what it can. """
goodMatch = []; stillWrong = []; goodFix = [] #; fixed = ""
for f in dir1:
result = checkProper(f,term)
if result: goodMatch.append(result.group(0))
else:
fixed = regexSubFixGrouping(f,term)
#print "^^^^^^ ",fixed
if checkProper(fixed,term):
os.rename(path1+'\\'+f, path1+'\\'+fixed); goodFix.append(fixed)
else: os.rename(path1+'\\'+f, path1+'\\'+'@ '+fixed); stillWrong.append(fixed)
goodToGo = len(goodMatch)+len(goodFix); total = len(dir1); successRate = (goodToGo/(float(total)))*100.0
print "%d total files. %d files now in proper format. %0.2f%% success rate."%(total,goodToGo,successRate)
print "All files not in proper format are appended with @ to be clearly marked for the user."
return goodMatch, goodFix, stillWrong
したがって、これらの(ハイフンがない)エラーでファイル名を修正できるはずです。
201308 - (82431) - MAC 1105-006 College Algebra - Graziose, James.pdf
201308 - (82610) - MAC 2233-009 Methods of Calculus - Grigoriev, Stepan.pdf
また、2 番目のハイフンの後の 3 つの大文字に続く 4 つの整数の前にスペースがないというエラーも発生します。
201308 - (91500) - MAC1105-014 - College Algebra - Radulovic, AiBeng.pdf
regexSubFixGrouping()
可能であれば、必要以上に正規表現を実行するためにシステム リソースを使用するのではなく、メソッドを調整したいと考えています。私はPythonを独学しているので、ジュニアプログラマーなら誰でもこれを行うことができると確信していますが、プロがこの質問に遭遇した場合、彼らはこれを簡単に正すことができます.
編集:残りの外れ値:
201308 - (82442) - MAC 1105 - 012 - カレッジ代数 - Harmon, Drake.pdf 201308 - (92835) - MAC 1105 - 017 - カレッジ代数 - Harmon, Drake.pdf 201308 - (95125) - MAC1147-004 - Precaclculus Algebra & Trig - Greenberg, Alisa.pdf 201308 - (82600) - MAC1147-002 - Precaclculus Algebra & Trig - Greenberg, Alisa.pdf
最初の 2 なぜ彼らが釣れなかったのか私には分かりません。それらは本当に修正可能のようです。MAC
2 番目の 2 つ目は、と をスペースで区切らなかった理由がわかりません1147
。