我试图找到一个文件名,其中包含我使用列表传递的特定文本。我已经能够找到文件,但是似乎无法重命名它们。我不确定自己在做什么错,因此我们将不胜感激。在python上还很新,所以只需尝试学习一些简单的任务即可。
from os import rename, listdir
import fnmatch
i = 0
divisions = ['BAT','FAB','HIN','OFA','SBY','VAL',
'FRE','JEF','OLA','SPR','WEB','CTV',
'MOB','PET','SWN','DEN','GRE','MTJ',
'ROS','SXB','DWT','HAI','OAK','RPB','TUL']
divs = listdir('.')
ending = " Financials.xlsx"
for div in divs:
if fnmatch.fnmatch(div, divisions[i]):
rename(div, divisions[i] + ending)
i += 1
您的代码有两个问题。首先,该fnmatch
模式需要一个通配符来匹配文件名。其次,divisions
当您需要遍历所有文件直到找到匹配项时,每个文件名仅比较1个值。修复这些问题将为您提供以下内容(我重命名了几个值,因为在文件列表为“ divs”时使用名为“ divisions”的东西有点令人困惑)
from os import rename, listdir
from fnmatch import fnmatch
divisions = ['BAT','FAB','HIN','OFA','SBY','VAL',
'FRE','JEF','OLA','SPR','WEB','CTV',
'MOB','PET','SWN','DEN','GRE','MTJ',
'ROS','SXB','DWT','HAI','OAK','RPB','TUL']
# build (division name, fnmatch pattern) for each division
patterns = [(division, f"{division} Financials*.xlsx") for division in divisions]
filenames = listdir('.')
for filename in filenames:
for division, pattern in patterns:
if fnmatch(filename, pattern):
rename(filename, f"{division} Financials.xlsx")
break
如果您希望将其限制为2020年,则模式将会改变。实际上,您根本不需要fnmatch,因为您知道确切的文件名。
from os import rename, listdir
divisions = ['BAT','FAB','HIN','OFA','SBY','VAL',
'FRE','JEF','OLA','SPR','WEB','CTV',
'MOB','PET','SWN','DEN','GRE','MTJ',
'ROS','SXB','DWT','HAI','OAK','RPB','TUL']
filename_map = dict(f"{division} Financials 2020.xlsx":f"{division} Finanacials.xlsx"
for division in divisions)
filenames = listdir('.')
for filename in filenames:
mapped = filename_map.get(filename)
if mapped:
rename(filename, mapped)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句