การสร้างและบันทึกไฟล์ในไดเร็กทอรีใหม่ใน Python

ธุรกิจ

ส่วนต่อไปนี้จะอธิบายวิธีสร้างและบันทึกไฟล์ใหม่ใน Python โดยใช้ไดเร็กทอรี (โฟลเดอร์) ใหม่เป็นปลายทาง

  • เกิดข้อผิดพลาดเมื่อระบุไดเร็กทอรีที่ไม่มีอยู่ด้วย open()(FileNotFoundError)
  • os.makedirs()สร้างไดเร็กทอรี
  • ตัวอย่างโค้ดสำหรับสร้างไฟล์ใหม่ที่มีปลายทาง

ต่อไปนี้คือตัวอย่างไฟล์ข้อความ

เมื่อจัดเก็บรูปภาพ ขึ้นอยู่กับไลบรารีว่าคุณสามารถระบุพาธที่มีไดเร็กทอรีที่ไม่มีอยู่หรือไม่ (หรือจะสร้างไดเร็กทอรีดังกล่าวโดยอัตโนมัติหากไม่มีอยู่)
FileNotFoundErrorหากเกิดข้อผิดพลาดนี้ คุณสามารถสร้างไดเร็กทอรีใหม่ด้วย os.madeirs() ก่อนเรียกใช้ฟังก์ชันเพื่อบันทึก ดังตัวอย่างต่อไปนี้

เกิดข้อผิดพลาดเมื่อระบุไดเร็กทอรีที่ไม่มีอยู่ด้วย open()(FileNotFoundError)

เมื่อสร้างไฟล์ใหม่ด้วยฟังก์ชัน open() ในตัว จะเกิดข้อผิดพลาดหากมีการระบุเส้นทางที่มีไดเร็กทอรีใหม่ (ไดเร็กทอรีที่ไม่มีอยู่) เป็นอาร์กิวเมนต์แรกเป็นปลายทาง(FileNotFoundError)

open('not_exist_dir/new_file.txt', 'w')
# FileNotFoundError

อาร์กิวเมนต์แรกของ open() อาจเป็นพาธสัมบูรณ์หรือพาธที่สัมพันธ์กับไดเร็กทอรีปัจจุบัน

สำหรับการใช้งานพื้นฐานของ open() เช่น การสร้างไฟล์ใหม่ในไดเร็กทอรีที่มีอยู่ หรือการเขียนทับหรือต่อท้ายไฟล์ที่มีอยู่ โปรดดูบทความต่อไปนี้

สร้างไดเร็กทอรี(os.makedirs())

เมื่อสร้างไฟล์ใหม่ในไดเร็กทอรีที่ไม่มีอยู่ จำเป็นต้องสร้างไดเร็กทอรีก่อน open()

หากคุณกำลังใช้ Python 3.2 หรือใหม่กว่า จะสะดวกที่จะใช้ os.makedirs() โดยมีอาร์กิวเมนต์ที่มีอยู่_ok=True แม้ว่าไดเร็กทอรีเป้าหมายจะมีอยู่แล้ว จะไม่มีข้อผิดพลาดเกิดขึ้นและสามารถสร้างไดเร็กทอรีได้ในครั้งเดียว

import os

os.makedirs(new_dir_path, exist_ok=True)

หากคุณมี Python เวอร์ชันเก่าและไม่มีอาร์กิวเมนต์ที่มีอยู่แล้วใน os.makedirs() คุณจะได้รับข้อผิดพลาดหากคุณระบุพาธไปยังไดเร็กทอรีที่มีอยู่ ดังนั้นให้ใช้ os.path.exists() เพื่อตรวจสอบ การมีอยู่ของไดเร็กทอรีก่อน

if not os.path.exists(new_dir_path):
    os.makedirs(new_dir_path)

ดูบทความต่อไปนี้สำหรับรายละเอียด

ตัวอย่างโค้ดสำหรับสร้างไฟล์ใหม่ที่มีปลายทาง

ต่อไปนี้คือตัวอย่างโค้ดของฟังก์ชันที่สร้างและบันทึกไฟล์ใหม่โดยระบุไดเร็กทอรีปลายทาง

อาร์กิวเมนต์แรก dir_path คือพาธของไดเร็กทอรีปลายทาง ชื่อไฟล์อาร์กิวเมนต์ที่สองคือชื่อของไฟล์ใหม่ที่จะสร้าง และอาร์กิวเมนต์ที่สาม file_content คือเนื้อหาที่จะเขียน โดยแต่ละรายการจะระบุเป็นสตริง

หากไม่มีไดเร็กทอรีที่ระบุ ให้สร้างไดเร็กทอรีใหม่

import os

def save_file_at_dir(dir_path, filename, file_content, mode='w'):
    os.makedirs(dir_path, exist_ok=True)
    with open(os.path.join(dir_path, filename), mode) as f:
        f.write(file_content)

ใช้ดังนี้.

save_file_at_dir('new_dir/sub_dir', 'new_file.txt', 'new text')

ในกรณีนี้ ไฟล์ new_file.txt ที่มีเนื้อหา “ข้อความใหม่” จะถูกสร้างขึ้นใน new_dir\sub_dir กล่าวคือ ไฟล์ต่อไปนี้จะถูกสร้างขึ้นใหม่new_dir/sub_dir/new_file.txt

การต่อไดเร็กทอรีและชื่อไฟล์ด้วย os.path.join()

นอกจากนี้ โหมดของ open() ถูกระบุเป็นอาร์กิวเมนต์ สำหรับไฟล์ข้อความ ค่าเริ่มต้น ‘w’ ก็ใช้ได้ แต่ถ้าคุณต้องการสร้างไฟล์ไบนารี ให้ตั้งค่า mode=’wb’