พา ธ สัมบูรณ์ UNIX เริ่มต้นด้วย '/' ในขณะที่ Windows เริ่มต้นด้วยตัวอักษร 'C:' หรือ '\' ไพ ธ อนมีฟังก์ชั่นมาตรฐานเพื่อตรวจสอบว่าพา ธ นั้นเป็นแบบสัมบูรณ์หรือสัมพัทธ์หรือไม่?
พา ธ สัมบูรณ์ UNIX เริ่มต้นด้วย '/' ในขณะที่ Windows เริ่มต้นด้วยตัวอักษร 'C:' หรือ '\' ไพ ธ อนมีฟังก์ชั่นมาตรฐานเพื่อตรวจสอบว่าพา ธ นั้นเป็นแบบสัมบูรณ์หรือสัมพัทธ์หรือไม่?
คำตอบ:
os.path.isabs
ผลตอบแทนTrue
ถ้าเส้นทางที่แน่นอนFalse
ถ้าไม่ เอกสารบอกว่าใช้งานได้ใน windows (ฉันสามารถยืนยันได้ว่าทำงานได้ใน Linux เป็นการส่วนตัว)
os.path.isabs(my_path)
และถ้าสิ่งที่คุณต้องการจริงๆคือเส้นทางที่สมบูรณ์ไม่ต้องกังวลกับการตรวจสอบเพื่อดูว่ามันเป็นเพียงแค่รับabspath
:
import os
print os.path.abspath('.')
import os.path
os.path.isabs('/home/user')
True
os.path.isabs('user')
False
ที่จริงฉันคิดว่าไม่มีคำตอบข้างต้นที่แก้ไขปัญหาจริง: เส้นทางข้ามแพลตฟอร์ม สิ่งที่ os.path ทำคือโหลดไลบรารี 'path' เวอร์ชันขึ้นกับระบบปฏิบัติการ ดังนั้นวิธีแก้ไขคือโหลดไลบรารีเส้นทาง (OS) ที่เกี่ยวข้องอย่างชัดเจน:
import ntpath
import posixpath
ntpath.isabs("Z:/a/b/c../../H/I/J.txt")
True
posixpath.isabs("Z:/a/b/c../../H/I/J.txt")
False
def path_is_abs(p): return (len(p) > 1) and (p[0] == '/' or p[1] == ':')
จากpython 3.4
pathlibสามารถใช้ได้
In [1]: from pathlib import Path
In [2]: Path('..').is_absolute()
Out[2]: False
In [3]: Path('C:/').is_absolute()
Out[3]: True
In [4]: Path('..').resolve()
Out[4]: WindowsPath('C:/the/complete/path')
In [5]: Path('C:/').resolve()
Out[5]: WindowsPath('C:/')
Path('\tmp').is_absolute()
ให้ถูกต้องFalse
ในขณะที่ช่วยให้ไม่ถูกต้องos.path.isabs('\tmp')
True
(บางคนอาจแย้งว่า\tmp
นี่เป็นเส้นทางที่สมบูรณ์แบบบน Windows แต่นั่นเป็นเพียงความจริงสำหรับคำจำกัดความที่ไร้ประโยชน์ของเส้นทางที่แน่นอน )
อีกวิธีหนึ่งถ้าคุณไม่ได้อยู่ในไดเรกทอรีการทำงานปัจจุบันเลยสกปรก แต่มันใช้ได้กับฉัน
import re
path = 'my/relative/path'
# path = '..my/relative/path'
# path = './my/relative/path'
pattern = r'([a-zA-Z0-9]|[.])+/'
is_ralative = bool(pattern)
os.path.isabs('c:\\')
คืนค่า False