✔ 위의 pom파일에 있는 기사 스크랩한 파일들을 분류명대로 정리파일에 분류하기로 한다. (무작위로 스크랩하였음)
import os
import glob
import zipfile
import shutil
import fnmatch
import pathlib
- 먼저 관련된 모듈들을 임포트한다.
os.getcwd()
- 현재 경로를 알아보는 코드 'C:\\pom\\KDT3\\Python\\jupyter\\filemanager\\pom' 안에 있는것을 확인할 수 있다.
# 압축파일 확인
zipfile_path = []
for filename in glob.glob(os.path.join(target_path, '**/*.zip'), recursive=True):
zipfile_path.append(filename)
print(zipfile_path)
- 압축파일을 확인한다.
['.\\스크랩.zip']
(이처럼 압축 파일이 현재 경로 안에 잘 있는 것이 확인 가능하다.)
# 압축파일 해제
for filename in zipfile_path:
with zipfile.ZipFile(filename) as myzip:
zipinfo = myzip.infolist()
for info in zipinfo:
decode_name = info.filename.encode('cp437').decode('euc-kr')
info.filename = os.path.join(target_path, decode_name)
myzip.extract(info)
- 압축파일을 해제한다.
!pip install openpyxl
- 파일관리자 프로그램으로 openpyxl을 설치한다 (엑셀 작성 프로그램)
import openpyxl as opx
- openpyxl을 임포트한다. (opx로 별칭을 주었음)
def getFileName(target_path):
wb = opx.Workbook()
ws = wb.active
ws.cell(row=1, column=1).value = '파일경로'
ws.cell(row=1, column=2).value = '파일명(변경전)'
ws.cell(row=1, column=3).value = '파일명(변경후)'
i = 2
current_dir = target_path
filelist = os.listdir(current_dir)
for filename in filelist:
ws.cell(row=i, column=1).value = current_dir + '/'
ws.cell(row=i, column=2).value = filename
i = i + 1
wb.save(os.path.join(target_path, 'filelist.xlsx'))
- 파일경로, 파일명(변경전), 파일명(변경후) 셀이 작성되는 filelist.xlsx 엑셀파일을 target_path에 생성하는 함수를 만든다.
getFileName(target_path)
- 함수를 실행시킨다.
# 파일명 변경하기
def excelRoad(filepath):
wb = opx.load_workbook(filepath)
ws = wb.active
dirpath = [r[0].value for r in ws]
file_before = [r[1].value for r in ws]
file_after=[r[2].value for r in ws]
datalist = []
len_num = len(dirpath)
for i in range(1, len_num):
temp_tuple = (dirpath[i], file_before[i], file_after[i])
datalist.append(temp_tuple)
return datalist
- 파일명을 변경하여 깔끔하게 정리하는 함수이다.
rename_list = excelRoad(os.path.join(target_path, 'filelist.xlsx'))
print(rename_list)
- rename_list 변수에 함수를 할당하여 출력한다.
- 일단은 튜플화 되어 나타난다.
def fileRename(datalist):
for data in datalist:
print(data[1] + '의 파일명을' + data[2] + '로 변경합니다')
shutil.move(data[0]+data[1], data[0]+data[2])
fileRename(rename_list)
(위와 같이 정리됨을 알 수 있다. -> 바뀐건 딱히 없지만 파일명을 정리 할 때 유용하게 사용할 수 있다.)
# 디렉토리안의 파일을 확인하여 카테고리를 뽑아주는 함수를 만들어보자
#['정치', '연예', '사회', '경제', 'IT']
# fnmatch.fnmatch() 메서드를 사용
def categoryList(target_path):
file_list = []
for filename in os.listdir(target_path):
if fnmatch.fnmatch(filename, '*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_*.*'):
file_list.append(filename)
category = []
for file in file_list:
temp_list = file.split('_')
category.append(temp_list[0])
category = set(category)
return list(category)
categoryList(target_path)
- 카테고리를 뽑아주는 함수이다. ['정치', '연예', '사회', '경제', 'IT'], 이렇게 리스트로 뽑아준다.
categorylist = categoryList(target_path) + ['기타']
print(categorylist)
- ['정치', '연예', '사회', '경제', 'IT'], 여기에 '기타'까지 포함된다.
['IT', '경제', '정치', '사회', '연예', '기타']
new_path = './정리'
- new_path에 정리 폴더를 지정한다.
def makeDir(new_path, categorylist):
for category in categorylist:
new_dir = pathlib.Path(os.path.join(new_path, category))
new_dir.mkdir(parents=True, exist_ok=True)
makeDir(new_path, categorylist)
- makeDir 함수를 만들어 준다. -> 위처럼 분류된 폴더 생성
# 파일 분류 및 이동하기
def moveFile(new_path, target_path, categorylist):
dirlist = os.listdir(new_path)
filelist = os.listdir(target_path)
categorydic = {}
for file in filelist:
try:
temp_list = file.split('_')
assert temp_list[0] in categosrylist
categorydic[file] = temp_list[0]
except:
categorydic[file] = '기타'
for key,value in categorydic.items():
shutil.copy(target_path + '/' + key, new_path + '/' + value)
moveFile(new_path, target_path, categorylist)
- 파일을 분류한 폴더대로 분류후 이동시킨다.
‼트러블 슈팅!!
- 쥬피터 노트북을 사용하게 되면,
.ipynb_checkpoints 폴더가 생성되면서 자동적으로 노트북 파일이 그곳에 저장된다.
여기서 문제!!는,,,
[Errno 13] Permission denied
이런 에러를 볼 수 있는데
이 에러는,
1. 이 파일을 현재 사용중에 있다
2. 권한이 없다
3. 파일이 아닌 폴더 경로이다
이러한 원인을 찾을 수 있다.
내가 볼땐 3번 같은 느낌적인 느낌인데,,,(?)
지금은 현재 해결할 수 없어 난관에 부딪혀 있는 상태이다.!!!!!!
-> 곧 해결 할 수 있도록 해보겠다~~
ok 여기까지.
'코딩 > 파이썬' 카테고리의 다른 글
파일 입출력 라이브러리 (0) | 2024.03.21 |
---|---|
파이썬 과제 (5). 영어 단어장 만들기 (파일 입출력) (0) | 2024.03.21 |
변수 타입 어노테이션 (0) | 2024.03.21 |
파이썬 모듈 (0) | 2024.03.20 |
파일 입출력 (0) | 2024.03.20 |