โมดูล pathlib ให้แนวทางเชิงออบเจ็กต์ในการจัดการ filesystem paths โมดูลยังให้ฟังก์ชันที่เหมาะสมสำหรับระบบปฏิบัติการต่างๆ คลาสที่นิยามในโมดูลนี้มีสองประเภท คือ pure path types และ concrete path types ในขณะที่ pure paths ทำได้แค่การคำนวณอย่างบริสุทธิ์ concrete paths สามารถทำ I/O operations ได้ด้วย
โมดูล pathlib นิยามคลาสดังนี้:
| ลำดับ | โมดูล & คำอธิบาย |
|---|---|
| 1 | PurePath คลาสฐานสำหรับคลาสอื่นๆ ทั้งหมด |
| 2 | Path สับคลาสจาก PurePath เป็น concrete class ที่แทน filesystem path |
| 3 | PosixPath Path subclass สำหรับ OS ที่ไม่ใช่ Windows |
| 4 | WindowsPath Path subclass สำหรับระบบ Windows |
| 5 | PurePosixPath PurePath subclass สำหรับระบบที่ไม่ใช่ Windows |
| 6 | PureWindowsPath PurePath subclass สำหรับระบบ Windows |
เมื่อสร้างอินสแตนซ์ของคลาส Path จะคืนค่า WindowsPath หรือ PosixPath อัตโนมัติตามระบบของคุณ
สังเกตว่า WindowsPath หรือ PosixPath object สร้างโดยตรงได้ แต่เฉพาะระบบประเภทเดียวกันเท่านั้น
เพื่อสร้าง Path object ใช้ไวยากรณ์ดังนี้:
>>> from pathlib import *
>>> p = Path(".")
>>> type(p)
เห็นได้ว่าเนื่องจากคำสั่งรันบน Windows WindowsPath object ถูกสร้าง "." หมายถึง current directory
คลาส Path มีเมธอดดังต่อไปนี้:
absolute() − คืนค่ารุ่น absolute ของ Path object
>>> p.absolute()
WindowsPath('C:/python36')
exists() − คืนค่า true หาก path ที่ให้มามีอยู่
>>> p = Path("mydir")
>>> p.exists()
False
>>> p = Path("etc")
>>> p.exists()
True
is_dir() − คืนค่า true หาก path เป็นไดเรกทอรี
>>> p = Path("etc")
>>> p.is_dir()
True
>>> p = Path("test.py")
>>> p.is_dir()
False
is_file() − คืนค่า true หาก path ตรงกับไฟล์
>>> p = Path("tmp.py")
>>> p.is_file()
True
>>> p = Path("etc")
>>> p.is_file()
False
iterdir() − คืนค่า generator ที่ yield ชื่อไฟล์ในไดเรกทอรีที่ตรงกับ path
>>> p = Path("libs")
>>> for f in p.iterdir():
... print(f)
libs\libpython36.a
libs\python3.lib
libs\python36.lib
libs\_tkinter.lib
mkdir() − สร้างไดเรกทอรีใหม่ที่แทน path หากยังไม่มีอยู่
>>> p = Path("mydir")
>>> p.mkdir()
>>> p.absolute()
WindowsPath('C:/python36/mydir')
>>> p = Path("codes")
>>> p.mkdir()
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'codes'
open() − เปิดไฟล์ที่แทนด้วย Path object และคืนค่าออบเจ็กต์ไฟล์ คล้ายกับ built-in open()
>>> p = Path("Hello.py")
>>> f = p.open()
>>> f.readline()
'Hello Python'
read_bytes() − เปิดไฟล์ในโหมดไบนารี อ่านข้อมูลในรูปแบบไบนารีและปิด
>>> p = Path("Hello.py")
>>> f.read_bytes()
>>> p.read_bytes()
b'Hello Python'
read_text() − เปิดไฟล์ในโหมดข้อความเพื่ออ่านข้อความและปิดหลังจากนั้น
>>> p = Path("Hello.py")
>>> p.read_text()
'Hello Python'
write_text() − เปิดไฟล์ เขียนข้อความ และปิด
>>> p = Path("Hello.py")
>>> p.write_text("Hello how are you?")
18
write_bytes() − เขียนข้อมูลไบนารีในไฟล์และปิด
>>> p = Path("Hello.py")
>>> p.write_bytes(b'I am fine')
9
stat() − คืนค่าข้อมูลเกี่ยวกับ path นี้
>>> p.stat() os.stat_result(st_mode=16895, st_ino=9570149208167477, st_dev=1526259762, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1543085915, st_mtime=1543085915, st_ctime=1543085915)
rmdir() − ลบไดเรกทอรีที่ตรงกับ Path object
>>> p = Path("mydir")
>>> p.rmdir()
Path.cwd() − เป็น classmethod ของคลาส Path คืนค่าพาธไปยัง current working directory
>>> Path.cwd()
WindowsPath('C:/python36')
Path.home() − เป็น classmethod ของคลาส Path คืนค่าพาธไปยัง home directory
>>> Path.home()
WindowsPath('C:/Users/acer')
ออปเรเตอร์ '/' ใช้สร้าง paths:
>>> p = Path(".")
>>> p1 = p/'codes'
>>> p1.absolute()
WindowsPath('C:/python36/codes')
ในบทความนี้เราเรียนรู้ object-oriented API สำหรับ filesystem objects ตามที่นิยามในโมดูล pathlib