Python 파일과 디렉토리 작업하는 PyFilesystem2 라이브러리 알아보기
오늘은 Python에서 파일과 디렉토리 작업을 추상화시킬 수 있는 라이브러리인 PyFilesystem2 패키지에 대하여 간단히 알아보려 합니다.
PyFilesystem2 설치
우선 virtualenv로 파이썬 환경을 분리해줍니다.
pip3 install virtualenv
virtualenv -mvenv env
env라는 이름의 가상 환경을 생성합니다.
source env/bin/activate
가상환경을 폴더에서 활성화합니다.
pip3 install --upgrade pip
pip의 업그레이드가 존재하는지 확인하고 진행합니다.
pip install fs
pip로 PyFilesystem2를 설치합니다.
기본 예제
from fs.osfs import OSFS
PyFilesystem2에서 OSFS를 가져옵니다.
home_fs = OSFS("~/")
print(home_fs)
dir_list = home_fs.listdir('/')
print(dir_list)
OSFS 객체로 홈 폴더를 가져올 수 있고, 해당 폴더의 내용도 가져올 수 있습니다.
from fs import open_fs
PyFilesystem2에서 open_fs를 가져옵니다.
home_fs = open_fs('osfs://~/')
print(home_fs.listdir('/'))
url로 폴더를 열 수 있습니다.
my_fs = open_fs('.')
print(my_fs.tree())
트리 형식으로 출력할 수 있습니다.
current_fs = open_fs('.')
current_fs.writetext('test.txt', 'hello world!')
current_fs.close()
문자열로 기록한 파일을 만들 수 있습니다.
with open_fs('.') as current_fs:
current_fs.writetext('test.txt', 'hello world!')
with open_fs('.') as current_fs:
with current_fs.open('test.txt') as test_file:
print(test_file.read())
with as로 __enter__ 과 __exit__ 를 자동으로 호출하여 close()를 별도로 하지 않아도 됩니다.
current_fs = open_fs('.')
print(current_fs.listdir('/.idea'))
현재 폴더에서 하위 폴더의 목록을 출력할 수 있습니다.
current_fs = open_fs('.')
directory = list(current_fs.scandir('/.idea'))
for i in directory:
print(i)
현재 폴더에서 하위 폴더의 목록을 iterator하게 할 수 있습니다.
current_fs = open_fs('.')
if not current_fs.exists('text'):
folder_fs = current_fs.makedirs('text')
folder_fs.touch('__init__.py')
folder_fs.writetext('README.md', "# hello,world!")
print(folder_fs.listdir('/'))
폴더를 만들고, 파일을 생성하거나 문자열을 기록할 수 있습니다.
current_fs = open_fs('.')
for path in current_fs.walk.files(filter=['*.py']):
print(path)
원하는 폴더 위치의 모든 하위 파일을 출력할 수 있습니다.
위 코드와 같은 경우에는 특정 확장자만 필터를 추가했습니다.
from fs.copy import copy_fs
copy_fs('./text', 'zip://text.zip')
copy_fs를 가져오면 파일들을 zip 파일로 압축할 수 있습니다.
Written on May 9, 2019