คุณอาจต้องการสร้างไดเรกทอรีหากยังไม่มี
แหล่งหากยังคงมีอยู่ดังนั้น
================================================== ===================
บน Python ≥ 3.5 ให้ใช้pathlib.Path.mkdir
:
from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)
สำหรับ Python เวอร์ชันเก่าฉันเห็นคำตอบสองข้อที่มีคุณสมบัติที่ดีแต่ละข้อมีข้อบกพร่องเล็ก ๆ ดังนั้นฉันจะให้เวลากับฉัน:
ลองos.path.exists
และพิจารณาos.makedirs
การสร้าง
import os
if not os.path.exists(directory):
os.makedirs(directory)
ตามที่ระบุไว้ในความคิดเห็นและที่อื่น ๆ ที่มีการแย่งชิง - ถ้าไดเรกทอรีถูกสร้างขึ้นระหว่างos.path.exists
และos.makedirs
สายที่จะล้มเหลวกับos.makedirs
OSError
น่าเสียดายที่การจับตัวผ้าห่มOSError
และการทำต่อเนื่องนั้นไม่สามารถป้องกันได้เพราะมันจะเพิกเฉยต่อความล้มเหลวในการสร้างไดเรกทอรีเนื่องจากปัจจัยอื่น ๆ เช่นการอนุญาตที่ไม่เพียงพอเต็มดิสก์เป็นต้น
ทางเลือกหนึ่งคือการดักจับOSError
และตรวจสอบรหัสข้อผิดพลาดในตัว (ดูที่วิธีการรับข้อมูลจาก OSError ของ Python )
import os, errno
try:
os.makedirs(directory)
except OSError as e:
if e.errno != errno.EEXIST:
raise
หรืออาจมีวินาที os.path.exists
แต่สมมติว่ามีอีกสร้างไดเรกทอรีหลังจากการตรวจสอบครั้งแรกแล้วลบออกก่อนที่สอง - เราอาจยังคงถูกหลอก
ขึ้นอยู่กับแอปพลิเคชันอันตรายของการดำเนินการพร้อมกันอาจจะมากหรือน้อยกว่าอันตรายที่เกิดจากปัจจัยอื่น ๆ เช่นการอนุญาตไฟล์ ผู้พัฒนาจะต้องรู้เพิ่มเติมเกี่ยวกับแอปพลิเคชันเฉพาะที่กำลังพัฒนาและสภาพแวดล้อมที่คาดไว้ก่อนที่จะเลือกการนำไปใช้
Python เวอร์ชั่นใหม่ปรับปรุงโค้ดนี้ให้ดีขึ้นเล็กน้อยโดยการเปิดเผยFileExistsError
(ใน 3.3 +) ...
try:
os.makedirs("path/to/directory")
except FileExistsError:
# directory already exists
pass
... และด้วยการอนุญาตให้อาร์กิวเมนต์คำหลักos.makedirs
เรียกexist_ok
(ใน 3.2+)
os.makedirs("path/to/directory", exist_ok=True) # succeeds even if directory exists.
os.stat
แทนเพื่อดูว่ามีทั้งไดเรกทอรีอยู่หรือไม่และเป็นไดเรกทอรีในเวลาเดียวกัน