development

디렉토리를 재귀 적으로 만들려면 어떻게해야합니까?

big-blog 2020. 7. 6. 06:57
반응형

디렉토리를 재귀 적으로 만들려면 어떻게해야합니까? [복제]


이 질문에는 이미 답변이 있습니다.

디렉토리를 재귀 적으로 생성하는 Python 방법이 있습니까? 나는이 길을 가지고있다 :

/home/dail/

나는 만들고 싶다

/home/dail/first/second/third

재귀 적으로 수행 할 수 있습니까? 아니면 하나씩 디렉토리를 만들어야합니까?

같은 것 :

chmodchown 각 파일 / 디렉토리에 대한 권한을 할당하지 않고 재귀 적으로 수행 할 수 있습니까?


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

반응형