디렉토리를 재귀 적으로 만들려면 어떻게해야합니까? [복제]
이 질문에는 이미 답변이 있습니다.
- 중첩 디렉토리를 안전하게 만드는 방법은 무엇입니까? 답변 25 개
디렉토리를 재귀 적으로 생성하는 Python 방법이 있습니까? 나는이 길을 가지고있다 :
/home/dail/
나는 만들고 싶다
/home/dail/first/second/third
재귀 적으로 수행 할 수 있습니까? 아니면 하나씩 디렉토리를 만들어야합니까?
같은 것 :
chmod 와 chown 각 파일 / 디렉토리에 대한 권한을 할당하지 않고 재귀 적으로 수행 할 수 있습니까?
os.makedirs
당신이 필요한 것입니다. 를 위해 chmod
또는 chown
사용해야 os.walk
하고 모든 파일에 사용 / 자신을 dir에.
아주 오래된 질문에 대한 새로운 답변 :
파이썬 3.2부터는 다음과 같이 할 수 있습니다.
import os
path = '/home/dail/first/second/third'
os.makedirs(path, exist_ok=True)
exist_ok
플래그 덕분에 디렉토리가 존재하더라도 (필요에 따라 ....) 불평하지 않습니다.
python 3.4 ( pathlib 모듈 포함)에서 시작하여 다음을 수행 할 수 있습니다.
from pathlib import Path
path = Path('/home/dail/first/second/third')
path.mkdir(parents=True)
python 3.5부터 시작 mkdir
하는 exist_ok
플래그 도True
있습니다. 디렉토리가 존재하면 예외가 발생하지 않도록 설정 합니다.
path.mkdir(parents=True, exist_ok=True)
Cat Plus Plus 의 답변에 동의합니다 . 당신이에서만 사용됩니다 알고있는 경우, 유닉스와 같은 운영체제, 당신은 쉘 명령에 외부 전화를 사용할 수 있습니다 mkdir
, chmod
하고 chown
. 디렉토리에 재귀 적으로 영향을 미치려면 추가 플래그를 전달하십시오.
>>> import subprocess
>>> subprocess.check_output(['mkdir', '-p', 'first/second/third'])
# Equivalent to running 'mkdir -p first/second/third' in a shell (which creates
# parent directories if they do not yet exist).
>>> subprocess.check_output(['chown', '-R', 'dail:users', 'first'])
# Recursively change owner to 'dail' and group to 'users' for 'first' and all of
# its subdirectories.
>>> subprocess.check_output(['chmod', '-R', 'g+w', 'first'])
# Add group write permissions to 'first' and all of its subdirectories.
편집 원래 commands
는 사용되지 않았으며 주입 공격에 취약하기 때문에 좋지 않은 선택이었습니다. 예를 들어, 사용자가이라는 디렉토리를 작성하기 위해 입력 한 경우 first/;rm -rf --no-preserve-root /;
모든 디렉토리를 잠재적으로 삭제할 수 있습니다.
편집 2 2.7 미만의 Python을 사용 check_call
하는 경우 대신을 사용하십시오 check_output
. 자세한 내용은 subprocess
설명서 를 참조하십시오.
다음은 참조를위한 구현입니다.
def _mkdir_recursive(self, path):
sub_path = os.path.dirname(path)
if not os.path.exists(sub_path):
self._mkdir_recursive(sub_path)
if not os.path.exists(path):
os.mkdir(path)
이 도움을 바랍니다!
os.makedirs를 사용해보십시오 :
import os
import errno
try:
os.makedirs(<path>)
except OSError as e:
if errno.EEXIST != e.errno:
raise
참고 URL : https://stackoverflow.com/questions/6004073/how-can-i-create-directories-recursively
'development' 카테고리의 다른 글
배경을 투명하게 변환하는 방법? (0) | 2020.07.06 |
---|---|
wpf에서 버튼 테두리를 어떻게 완전히 제거합니까? (0) | 2020.07.06 |
필드가 많거나 많은 Django 모델의 객체를 만드는 방법은 무엇입니까? (0) | 2020.07.06 |
SDK iOS 8.0의 제품 유형 단위 테스트 번들에는 코드 서명이 필요합니다. (0) | 2020.07.06 |
파이썬에서 16 진수 문자열을 바이트 배열로 (0) | 2020.07.06 |