该程序遍历一个目录并将文件名(如果可能)修复为特定格式的空格、连字符等。该方法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
还有错误,其中第二个连字符后的 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 我不知道为什么他们没有抓到。它们似乎真的是可以修复的。第二个 2,我不确定为什么它没有MAC
用空格分隔1147
.