목록을 사용하여 전달하는 특정 텍스트가 포함 된 파일 이름을 찾으려고합니다. 파일을 찾을 수 있었지만 이름을 바꿀 수 없습니다. 내가 뭘 잘못하고 있는지 잘 모르겠으므로 어떤 도움을 주시면 대단히 감사하겠습니다. 파이썬에서는 꽤 새롭기 때문에 몇 가지 간단한 작업으로 배우려고 노력합니다.
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
일치하는 항목을 찾을 때까지 모든 항목을 회전해야 할 때 파일 이름 당 하나의 값만 비교 합니다. 그것들을 수정하면 다음과 같은 결과를 얻을 수 있습니다 (파일 목록이 "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] 삭제
몇 마디 만하겠습니다