Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ไฟล์ซิสเต็มพาธแบบเชิงออบเจ็กต์ใน Python (pathlib)

โมดูล 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