파이썬으로 파일을 불러오는데 있어서 pathlib은 중요하다.
나는 항상
from pathlib import Path
dir_folder = Path('file path')
file1 = dir_folder / 'file name'
file2 = dir_folder / 'folder name' / 'file name'
def load(file: Path):
with open(file, mode='r') as f:
....
혹은
import pathlib
dir_folder = pathlib.Path(__file__).parent()
file1 = dir_folder / 'file name'
def load(file: pathlib):
with open(file, mode='r') as f:
...
와 같이 pathlib을 사용했었다.
하지만 얼마 전에 선배의 코드를 보고 이런 식으로 사용할 수 있구나 라는 것을 알았기 때문에 여기에 필기하려 한다.
1. pathlib.Path.open()
아까 적었던 yield 글에 올렸던 코드를 가져와 보겠다.
def iter_(file: Path):
with open(file, mode='r', encoding='utf-8') as f:
yield from csv.reader(f)
datum = iter_('filename')
여기서도 나는 with open(file, ... 로 코드를 시작했는데 사실
from pathlib import Path
from torchtext.data import Dataset
import csv
dir_folder = Path.home() / 'data'
if not dir_folder.exists():
dir_folder.mkdir(parents=True)
def iter_(path):
with path.open('r', encoding='utf-8') as fp:
yield from csv.reader(fp)
class DataLoadwithPath(Dataset):
urls = [
'url1'
'url2'
]
def __init__(self, fst_path, scd_path):
datum = []
for (i, j) in zip(iter_(fst_data_path), iter_(scd_data_path)):
datum.append((i, j))
super(DataLoadwithPath, self).__init__(datum)
@classmethod
def load(cls, path=None, root=dir_folder / 'dataset folder name'):
if path is None:
new_path = cls.download(root)
fst_data_path = Path(new_path) / 'file name'
scd_data_path = Path(new_path) / 'file name'
return fst_data_path, scd_data_path
if __name__ == '__main__':
처럼 file 대신 path를 인수로 넘겨줄 수 있다.
위 코드에 보면 뭐가 되게 등장하는데 하나씩 살펴보겠다.
2. pathlib.Path.home(), exists()
위 코드에 보면
dir_folder = Path.home() / 'data'
라고 되어있는데 파이썬3+에서 출력해보면 알겠지만 본인 계정 경로 즉 /Users/'account name' 이라는 것을 알 수 있다.
이처럼 어느 컴퓨터를 사용하더라도 Path.home() / 'data' 를 적어주면 무조건 같은 위치로 인식한다는 것이다.
만약 계정 폴더 안에 data라는 폴더가 없을 경우엔
if not dir_folder.exists():
dir_folder.mkdir(parents=True)
라고 적어줌으로써 data폴더를 만들어주고 그 안에 데이터를 생성하든 다운받든 할 수 있게 된다.
3. mkdir(parents=True)
마지막으로 볼 것은 방금 말한 data 폴더를 만들 때의 얘기인데, 이 때 mkdir()라는 함수가 나온다.
이건 command line으로 많이 사용하기 때문에 잘 알겠지만 폴더를 만들어 주기 위한 함수이다.
안에 parent=True 라고 되어있는 것은 상위폴더도 같이 생성하겠느냐를 묻는 것이고 True라고 했기 때문에 같이 생성된다.
(하지만 이걸로 새로 폴더를 생성해 봤으나 parent가 어디에 같이 생성되었다는 것인지 아직 잘 모르겠다. 그냥 홈 디렉토리에 내가 임의로 적은 이름의 폴더가 생성되었을 뿐이다)
'파이썬3 노트' 카테고리의 다른 글
torchtext: example 속 들여다보기 (0) | 2018.12.31 |
---|---|
[**kwargs] [assert] (0) | 2018.12.17 |
[return] [yield] [yield from] (0) | 2018.12.15 |
pytorch 공부: [nn.Sequential][nn.ModuleList] (3) | 2018.10.16 |
모듈/함수 공부: [__hash__()][Collections-Counter] (0) | 2018.08.11 |