[python] directory parse / glob / pathlib
```python
os.getcwd() # working directory == python command를 실행한 path
os.path.dirname(os.path.abspath(__file__)) # 현재 파일이 위치한 directory
```
디렉토리의 파일을 얻는 방법은 ``py os.listdir()``과 ``py glob.glob()`` 두 가지가 있다.
3.4 부터 ``py pathlib``이라는 고수준 파일 시스템 모듈이 있으니 이걸 쓰는게 좋다.
```python
from pathlib import Path
p = Path('.')
attack_packages = [x.resolve() for x in p.iterdir() if x.is_dir()]
a.suffix # asdf.py이면 .py 반환
a.stem # asdf.py이면 asdf 반환
```
os.listdir(path)
filename만 반환한다. 그래서 ``py os.path.join(dir, filename)``으로 이어줘야 한다.
glob.glob(patten, *, recursive=False)
filepath를 반환하며 `` patten`` 검색, `` recursive`` 검색 등을 지원한다.
path를 반환하기 때문에 파일 이름만 얻어내려면 ``py os.path.split(str)``로 잘라내야 한다.
```python
>>> fpaths = glob.glob("./imgs/*")
>>> fpaths
['./imgs/4.png', './imgs/2.png']
>>> fnames = [os.path.split(f) for f in fpaths]
>>> fnames
[('./imgs', '4.png'), ('./imgs', '2.png')]
>>> fnames = [os.path.split(f)[1] for f in fpaths]
>>> fnames
['4.png', '2.png']
>>> fnames = [os.path.splitext(f)[0] for f in fnames]
>>> fnames
['4', '2']
files2 = list(map(lambda x: os.path.split(x)[1], fullpaths))
```
``py recursive=True``인 경우 경로 끝에 `` **``을 적어야 하위 디렉토리까지 recursive하게 탐색한다.
`` */*/...``으로 타고 들어가는 방법도 있으니 참고.
아무튼, 파일 이름만 필요한 경우 `` os.listdir()``을 사용하고,
fullpath가 필요하거나 특정 파일만 검색하거나 recursive 검색 해야하는 경우 `` glob.glob()``을 사용하면 된다.
이를 반대로 사용하면 약간 번거로운 과정을 거쳐야한다.
파일 존재 유무 확인
'Languages & Frameworks > Python' 카테고리의 다른 글
[python] subprocess, Popen (1) | 2017.07.03 |
---|---|
[python] with / try-except (0) | 2017.07.02 |
[python] 람다(lambda), 함수형 fileter / map / reduce (2) | 2017.07.02 |
[python] Comprehension, Generator / iterator VS iterable / itertools (0) | 2017.07.02 |
[python] binary data와 16진수 / struct.pack (0) | 2017.05.09 |