디렉토리가 존재하는지 확인하고 필요한 경우 작성 하시겠습니까?
이에 대한 직접적인 대답은 다른 사용자 나 프로세스가 디렉토리를 망칠 것으로 예상하지 않는 간단한 상황을 가정 한 것입니다.
if not os.path.exists(d):
os.makedirs(d)
또는 디렉토리를 만들 때 경쟁 조건이 적용되는 경우 (예 : 경로를 확인한 후 다른 항목이 이미 만든 경우) 다음을 수행하십시오.
import errno
try:
os.makedirs(d)
except OSError as exception:
if exception.errno != errno.EEXIST:
raise
그러나 아마도 더 나은 접근 방식은 다음을 통해 임시 디렉토리를 사용하여 자원 경합 문제를 회피하는 것입니다. tempfile
.
import tempfile
d = tempfile.mkdtemp()
온라인 문서의 필수 사항은 다음과 같습니다.
mkdtemp(suffix='', prefix='tmp', dir=None)
User-callable function to create and return a unique temporary
directory. The return value is the pathname of the directory.
The directory is readable, writable, and searchable only by the
creating user.
Caller is responsible for deleting the directory when done with it.
Python 3.5의 새로운 기능 : pathlib.Path
와exist_ok
새로운 것이있다 Path
경로와 함께 사용하려는 많은 메소드 객체 (3.4 현재)가 있습니다.mkdir
있습니다.
상황에 따라 스크립트를 사용하여 주간 담당자를 추적하고 있습니다. 다음은 동일한 데이터에 대해 하루에 두 번 이상 스택 오버플로를 피할 수있게하는 스크립트의 관련 코드 부분입니다.
먼저 관련 수입품 :
from pathlib import Path
import tempfile
우리는 os.path.join
지금 처리 할 필요가 없습니다 /
.
directory = Path(tempfile.gettempdir()) / 'sodata'
그런 다음 디렉토리가 dem 등적으로 있는지 확인하십시오- exist_ok
인수는 Python 3.5에 표시됩니다.
directory.mkdir(exist_ok=True)
문서 의 관련 부분은 다음과 같습니다 .
경우 exist_ok
사실, FileExistsError
예외는 같은 (동일한 동작을 무시됩니다POSIX mkdir -p
명령),하지만 마지막 경로 구성 요소가 기존 디렉토리가 아닌 파일이 아닌 경우에만 가능합니다.
여기에 약간의 스크립트가 있습니다. 제 경우에는 경쟁 조건이 아니며 디렉토리 (또는 포함 된 파일)가있을 것으로 예상되는 프로세스가 하나 뿐이며 제거하려는 것이 없습니다. 디렉토리.
todays_file = directory / str(datetime.datetime.utcnow().date())
if todays_file.exists():
logger.info("todays_file exists: " + str(todays_file))
df = pd.read_json(str(todays_file))
Path
물체를 강제로 str
str
경로를 사용할 수있는 다른 API가 먼저 합니다.
아마도 추상 기본 클래스 인 인스턴스를 허용하도록 Pandas를 업데이트해야합니다 os.PathLike
.