ํ์ผ ์๋ํ
Python์ ์ฌ์ฉํ๋ฉด ๋ฐ๋ณต์ ์ธ ํ์ผ ์์ ์ ์๋ํํ ์ ์์ต๋๋ค. ํ์ผ๊ณผ ํด๋๋ฅผ ์์ฑ, ์ญ์ , ์ด๋, ๋ณต์ฌํ๋ ์์ ์ ์ฝ๋๋ก ์ฒ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
ํต์ฌ ๋ชจ๋โ
os ๋ชจ๋โ
์ด์์ฒด์ ์ ์ํธ์์ฉํ๋ ๊ธฐ๋ณธ ๋ชจ๋์ ๋๋ค.
import os
# ํ์ฌ ์์
๋๋ ํ ๋ฆฌ ํ์ธ
current_dir = os.getcwd()
print(f"ํ์ฌ ๋๋ ํ ๋ฆฌ: {current_dir}")
# ๋๋ ํ ๋ฆฌ ๋ณ๊ฒฝ
os.chdir('/Users/username/Documents')
# ๋๋ ํ ๋ฆฌ ๋ชฉ๋ก ๋ณด๊ธฐ
files = os.listdir('.')
print(files)
# ๊ฒฝ๋ก ๊ฒฐํฉ (์ด์์ฒด์ ์ ๋ง๊ฒ ์๋์ผ๋ก)
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path) # folder/subfolder/file.txt (macOS/Linux)
shutil ๋ชจ๋โ
๊ณ ์์ค ํ์ผ ์์ ์ ์ํ ๋ชจ๋์ ๋๋ค.
import shutil
# ํ์ผ ๋ณต์ฌ
shutil.copy('source.txt', 'destination.txt')
# ๋ฉํ๋ฐ์ดํฐ ํฌํจ ๋ณต์ฌ
shutil.copy2('source.txt', 'destination.txt')
# ํด๋ ์ ์ฒด ๋ณต์ฌ
shutil.copytree('source_folder', 'destination_folder')
# ํ์ผ/ํด๋ ์ด๋
shutil.move('old_location.txt', 'new_location.txt')
# ํด๋ ์ญ์ (๋ด์ฉ๋ฌผ ํฌํจ)
shutil.rmtree('folder_to_delete')
ํด๋ ๋ฐ ํ์ผ ์์ฑโ
๋๋ ํ ๋ฆฌ ์์ฑโ
import os
# ๋จ์ผ ๋๋ ํ ๋ฆฌ ์์ฑ
if not os.path.exists('new_folder'):
os.mkdir('new_folder')
# ์ค์ฒฉ ๋๋ ํ ๋ฆฌ ์์ฑ
os.makedirs('parent/child/grandchild', exist_ok=True)
# exist_ok=True: ์ด๋ฏธ ์กด์ฌํด๋ ์๋ฌ ๋ฐ์ ์ ํจ
ํ์ผ ์์ฑโ
# ๋น ํ์ผ ์์ฑ
with open('new_file.txt', 'w') as f:
pass
# ๋ด์ฉ๊ณผ ํจ๊ป ํ์ผ ์์ฑ
with open('data.txt', 'w', encoding='utf-8') as f:
f.write('Hello, World!\n')
f.write('Python ์๋ํ')
ํ์ผ ๋ฐ ํด๋ ์ญ์ โ
import os
import shutil
# ํ์ผ ์ญ์
if os.path.exists('file_to_delete.txt'):
os.remove('file_to_delete.txt')
# ๋น ๋๋ ํ ๋ฆฌ ์ญ์
if os.path.exists('empty_folder'):
os.rmdir('empty_folder')
# ๋ด์ฉ์ด ์๋ ๋๋ ํ ๋ฆฌ ์ญ์
if os.path.exists('folder_with_files'):
shutil.rmtree('folder_with_files')
ํ์ผ ๊ฒ์โ
os.walk๋ก ํ์ ํด๋ ํ์โ
import os
# ๋ชจ๋ ํ์ ํด๋์ ํ์ผ ์ฐพ๊ธฐ
for root, dirs, files in os.walk('/path/to/search'):
for file in files:
if file.endswith('.txt'):
full_path = os.path.join(root, file)
print(full_path)
glob ํจํด ๋งค์นญโ
import glob
# ํ์ฌ ํด๋์ ๋ชจ๋ .py ํ์ผ
python_files = glob.glob('*.py')
# ๋ชจ๋ ํ์ ํด๋์ .txt ํ์ผ
all_txt_files = glob.glob('**/*.txt', recursive=True)
# ํน์ ํจํด์ ํ์ผ
data_files = glob.glob('data_*.csv')
# pathlib๊ณผ ํจ๊ป ์ฌ์ฉ
from pathlib import Path
for file in Path('.').rglob('*.log'):
print(file)
ํ์ผ ์ ๋ณด ํ์ธโ
import os
from datetime import datetime
file_path = 'example.txt'
# ํ์ผ ์กด์ฌ ํ์ธ
exists = os.path.exists(file_path)
# ํ์ผ์ธ์ง ๋๋ ํ ๋ฆฌ์ธ์ง ํ์ธ
is_file = os.path.isfile(file_path)
is_dir = os.path.isdir(file_path)
# ํ์ผ ํฌ๊ธฐ (๋ฐ์ดํธ)
size = os.path.getsize(file_path)
print(f"ํฌ๊ธฐ: {size / 1024:.2f} KB")
# ํ์ผ ์์ ์๊ฐ
mtime = os.path.getmtime(file_path)
modified_date = datetime.fromtimestamp(mtime)
print(f"๋ง์ง๋ง ์์ : {modified_date}")
# ํ์ผ ์์ฑ ์๊ฐ
ctime = os.path.getctime(file_path)
created_date = datetime.fromtimestamp(ctime)
print(f"์์ฑ ์๊ฐ: {created_date}")
์ค์ ์์ โ
1. ์ฌ์ง ์ ๋ฆฌ ์คํฌ๋ฆฝํธโ
๋ ์ง๋ณ๋ก ์ฌ์ง์ ์๋์ผ๋ก ๋ถ๋ฅํฉ๋๋ค.
import os
import shutil
from datetime import datetime
from pathlib import Path
def organize_photos(source_dir, dest_dir):
"""์ฌ์ง์ ๋ ์ง๋ณ๋ก ์ ๋ฆฌ"""
# ๋ชฉ์ ์ง ํด๋ ์์ฑ
os.makedirs(dest_dir, exist_ok=True)
# ์ด๋ฏธ์ง ํ์ฅ์
image_extensions = {'.jpg', '.jpeg', '.png', '.gif', '.heic'}
for file_path in Path(source_dir).rglob('*'):
if file_path.suffix.lower() in image_extensions:
# ํ์ผ ์์ ๋ ์ง ๊ฐ์ ธ์ค๊ธฐ
mtime = os.path.getmtime(file_path)
date = datetime.fromtimestamp(mtime)
# ์ฐ๋/์ ํด๋ ์์ฑ
year_month = date.strftime('%Y/%m')
target_dir = os.path.join(dest_dir, year_month)
os.makedirs(target_dir, exist_ok=True)
# ํ์ผ ์ด๋
target_path = os.path.join(target_dir, file_path.name)
# ์ค๋ณต ํ์ผ๋ช
์ฒ๋ฆฌ
counter = 1
while os.path.exists(target_path):
name, ext = os.path.splitext(file_path.name)
target_path = os.path.join(
target_dir,
f"{name}_{counter}{ext}"
)
counter += 1
shutil.move(str(file_path), target_path)
print(f"์ด๋: {file_path.name} -> {year_month}/")
# ์ฌ์ฉ ์์
organize_photos('/Users/username/Downloads', '/Users/username/Photos')