goodthings4me.tistory.com
[출처] [나도코딩] 파이썬 코딩 무료 강의 (활용편4) - 업무자동화(RPA), 이제는 일하는 척(?)만 하세요 https://youtu.be/exgO1LFl9x8
■ 파이썬 파일시스템 (파이썬으로 파일, 폴더 다루기)
import os
import datetime
import time
import fnmatch
import shutil
## 파일 기본
print(os.getcwd()) # current working directory 현재 작업 공간
# os.chdir('directory명') # 작업 공간 이동
# os.chdir('..') # 상위(부모) 폴더로 이동
# os.chdir('../..') # 현재 기준 2단계 상위 폴더로 이동
# os.chdir('c:/') # 절대 경로로 이동
## 파일 경로 만들기
filename = os.path.join(os.getcwd() + '\my_file.txt') # 절대경로 생성
print(filename) # 현재 경로 + my_fiel.txt
## 파일 경로에서 폴더 정보만 가져오기
path = os.path.dirname(r'D:\backup\dev\python\my_file.txt')
print(path) # D:\backup\dev\python
## 파일 정보 중 파일 생성 날짜 가져오기
ctime = os.path.getctime('./image/file_menu.png') # c - create
print(ctime)
print(datetime.datetime.fromtimestamp(ctime))
print(datetime.datetime.fromtimestamp(ctime).strftime('%Y%m%d %H:%M:%S'))
## 파일의 수정 날짜
mtime = os.path.getmtime('./bid2.txt') # m -modify
print(mtime)
print(datetime.datetime.fromtimestamp(mtime))
print(datetime.datetime.fromtimestamp(mtime).strftime('%Y%m%d %H:%M:%S'))
## 파일의 마지막 접근 날짜
atime = os.path.getatime('./bid2.txt') # a -access
print(atime)
print(datetime.datetime.fromtimestamp(atime))
print(datetime.datetime.fromtimestamp(atime).strftime('%Y%m%d %H:%M:%S'))
## 파일 크기
filesize = os.path.getsize('beautifulsoup.py')
print(filesize) # 바이트 단위로 파일 크기 가져옴
## 파일 목록 가져오기
fileList = os.listdir() # 현재 디렉토리의 모든 폴더, 파일 목록 가져오기
print(fileList, type(fileList)) # list 타입
print(os.listdir('./image')) # 주어진 폴더의 모든 폴더와 파일 리스트 가져오기
## 파일 목록 가져오기 (하위 폴더의 파일 모두 포함)
result = os.walk('./') # 디렉토리 주어야 함 './' or '.' 는 현재 디렉토리
print(result, type(result))
# <generator object walk at 0x0000016AD78E7B30> <class 'generator'>
for d in result: # (./, [], []) 형태임 - root, directory, file
print(d)
for root, dirs, files in result:
print(f'root: {root}')
for d in dirs:
print(f'directory: {d}')
for f in files:
print(f'filename: {f}')
## 폴더 내에서 특정 파일들을 찾으려면?
name = 'movie_2020_2.jpg'
result = []
for root, dirs, files in os.walk('.'):
if name in files:
result.append(os.path.join(root, name))
print(result)
## 폴더 내에서 특정 패턴을 가진 파일들을 찾으려면? import fnmatch
# *.xlsx, *.txt, 자동화*.png 등
pattern = '생생*.txt' # '*.txt'
result = []
for root, dirs, files in os.walk('.'):
for name in files:
if fnmatch.fnmatch(name, pattern): # 파일 이름과 패턴이 일치하면
result.append(os.path.join(root, name))
print(result)
## 주어진 경로가 폴더인지, 파일인지 알아내기
print(os.path.isdir('image'))
print(os.path.isfile('image'))
## 지정된 경로에 해당하는 파일 또는 폴더가 없다면? - os.path.exists()
if os.path.exists('image'):
print('파일 또는 폴더가 존재합니다.')
else:
print('존재하지 않습니다.')
## 파일 만들기
open('new_file.txt', 'a').close() # 빈 파일 생성
## 파일명 변경
os.rename('new_file.txt', 'new_file_rename.txt')
## 파일 삭제하기
os.remove('new_file_rename.txt')
## 폴더 만들기
os.mkdir('new_folder') # 현재 경로 기준으로 폴더 생성
os.mkdir('d:/users/test') # 절대 경로 기준으로 폴더 생성
# os.mkdir('new_folder/a/b') # 에러 발생 - 이렇게 사용 불가
os.makedirs('new_folders/a/b') # 하위 폴더까지 생성
## 폴더 지우기 - 하위 폴더까지 지우려면 import shutil - shell utilities
os.rmdir('new_folder')
os.rmdir('new_folders') # OSError: [WinError 145] 디렉터리가 비어 있지 않습니다:
shutil.rmtree('new_folders') # 폴더 안이 비어 있지 않아도 완전 삭제 가능 (사용 주의!!)
## 파일 복사하기
os.mkdir('test_folder')
shutil.copy('random.py', 'test_folder')
print(os.listdir('./test_folder'))
shutil.copy('random.py', 'test_folder/random_new.py')
shutil.copyfile('random.py', 'test_folder/random_rename.py') # 대상 경로와 파일명 필수
shutil.copy2('random.py', 'test_folder/random2.py')
# copy, copyfile은 메타정보 복사(X), copy2는 메타정보 복사(O)
## 폴더 복사
shutil.copytree('test_folder', 'test_folder2') # 원본 폴더 경로, 대상 폴더 경로
## 폴더 이동
shutil.move('test_folder', 'test_folder2')
■ 주어진 경로의 모든 폴더와 파일 이름 가져오기
def files(fp):
for dirpath, dirnames, filenames in os.walk(fp):
print(f'\n{dirpath}')
for file in filenames:
print(file)
if cnt := len(dirnames):
for i in range(cnt):
files(dirnames[i]) # 재귀 호출
files(r'D:\test')
■ 메타정보 없이 파일만 다른 폴더에 복사
source_path = r'D:\test'
target_path = r'D:\test2'
# 방법 1
for file in os.listdir(source_path):
if os.path.isfile(file):
shutil.copy(file, target_path)
# 방법 2
for file in [f for f in os.listdir(source_path) if os.path.isfile(f)]:
shutil.copy(file, target_path)
■ 특정 폴더에 있는 파일 리스트를 가져와서 엑셀로 저장하기
import os
from datetime import datetime
import pandas as pd
def file_list(source_path, target_path):
fileName = []
filePath = []
fileSize = []
fileCreateDate = []
fileModifyDate = []
for dirpath, dirnames, filenames in os.walk(source_path):
for file in filenames:
fileName.append(file)
filePath.append(dirpath)
fileSize.append(os.stat(dirpath + '/' + file).st_size) # 파일 크기
# os.stat()의 속성으로 파일 생성 및 수정 일시 알아보기, 시간 포맷 변경
print(os.stat(dirpath + '/' + file))
# -----------------------------------------------------------
# os.stat_result(st_mode=33206,
# st_ino=9007199254749934,
# st_dev=1725487634,
# st_nlink=1,
# st_uid=0,
# st_gid=0,
# st_size=15139,
# st_atime=1625577614,
# st_mtime=1605448050,
# st_ctime=1625577614)
# -----------------------------------------------------------
ctime = os.stat(dirpath + '/' + file).st_ctime # 파일 생성 일시
stctime = datetime.fromtimestamp(ctime).strftime('%Y-%m-%d %H:%M:%S')
fileCreateDate.append(stctime)
mtime = os.stat(dirpath + '/' + file).st_mtime # 파일 수정일시
stmtime = datetime.fromtimestamp(mtime).strftime('%Y-%m-%d %H:%M:%S')
fileModifyDate.append(stmtime)
file_dict = {'Name':fileName, 'FolderPath':filePath, 'Size':fileSize, 'DateCreated':fileCreateDate, 'DateModified':fileModifyDate}
df = pd.DataFrame(file_dict)
df.to_excel(r'D:\test2' + '\FileList.xlsx')
source_path = r'D:\test'
target_path = r'D:\test2'
file_list(source_path, target_path)
[참고 : https://www.youtube.com/watch?v=epIaTx6l1mI]
블로그 인기글
엑셀 시트 분리 저장 - 엑셀 파일의 시트를 분리하여 저장하기
엑셀을 사용하다 보면 엑셀 시트를 분리해서 저장해야 할 때가 있다. 최근에도 이런 경우가 발생하여 구글링 후 엑셀 시트 분리 업무를 수행하고 내친김에 다른 사람들도 사용할 수 있도록 파이썬 tkinter로 프로그램으로 만들어 보았다. Excel Sheets 분리 저장하는 프로그램(with 파이썬 Tkinter) ※ 프로그램 다운로드(네이버 MYBOX에서 공유) : ExcelSeparateSheets.zip ▶ 프래그램을 실행하면 다음과 같이 초기 화면이 보인다. 찾아보기 : 엑셀 파일이 있는 폴더를 선택한다. (프로그램이 있는 최상위 디렉터리가 열린다) 실행하기 : 프로그램 실행 버튼 상태 변경 순서 : 실행전 → 실행 중 → Sheet "OOO" 분리 저장 중 → 실행 완료 실행 결과 확인 : 엑셀 파..
goodthings4me.tistory.com
[엑셀] 근무연수 및 근무 개월수 계산하는 함수
직장을 다니다 보면 몇 년 몇 개월 또는 전체 며칠을 다니고 있는지 궁금할 때가 있다. 아니면, 총무나 인사 일을 할 때 직원들의 근속연수 또는 근속개월수 등을 계산하고 싶을 때도 있다. 이런 경우 엑셀 함수를 활용하면 어떨까!! 근무연수 및 근무 개월수 계산 함수 알아보기 엑셀에서 근무연수 또는 근무 개월수 계산하는 것은 datedif() 함수를 사용하면 간단하게 해결할 수 있다. 아래 이미지를 보면서 설명하면, 셀 E1에 기준일자를 입력하고, 근무연수를 구할 때는 =datedif(B3,$E$1,"Y")&"년" 을 입력한다. 근무개월수는 =datedif(B3,$E$1,"M")&"개월" 처럼 입력한다. 일수까지 파악할 때문 별로 없지만, 심심풀이로 구해보고 싶을 때 =datedif(B3,$E$1,"D")..
goodthings4me.tistory.com
유튜브 영상 등의 URL 주소를 QR코드로 만들기
네이버 QR코드, makeQR, MUST QRcode, 무료 온라인 QRCode 생성기 등의 웹사이트에서 유튜브 영상 등의 URL을 입력하여 QR코드를 만들 수 있다. QR코드를 생성할 수 있는 사이트와 프로그램 URL 주소를 붙여넣기 한 후 "QR 코드 생성" 버튼을 클릭하면 큐알코드가 이미지로 생성되고, 다운로드도 할 수 있는 사이트 https://truedoum.com/useful/qrcode/ # 유튜브에서 동영상 URL을 복사하는 방법 유튜브에서 QR코드를 만들 동영상을 검색한다. 해당 동영상을 클릭한다. 동영상 위에서 마우스 우클릭 후 나오는 팝업창에서 “동영상 URL 복사”를 클릭하거나 영상 하단의 “공유”를 클릭하여 나온 창에서 URL를 복사한다. 아래의 웹사이트 중 하나를 선택한 후 복사..
goodthings4me.tistory.com
댓글