Python เพิ่มเครื่องหมายทับลงในสตริงไดเร็กทอรี OS แยกกัน


114

ฉันจะเพิ่มเครื่องหมายทับ ( /สำหรับ * nix \สำหรับ win32) ลงในสตริงไดเร็กทอรีได้อย่างไรถ้าไม่มีเครื่องหมายทับท้าย ขอบคุณ!


8
คุณควรใช้os.pathโมดูล ( docs.python.org/library/os.path.html ) แทนการจัดการสตริงโดยตรง ใช้os.path.joinเพื่อต่อคอมโพเนนต์พา ธ
kennytm

2
ขอบคุณ Tim ที่เตือนหลังจากอ่านเอกสารแล้วฉันคิดว่าคำตอบสำหรับคำถามที่แท้จริงของฉันคือ os.path.join (โฟลเดอร์ชื่อไฟล์) และฉันไม่ต้องกังวลกับเครื่องหมายทับเลย ผู้ชายฉันจะรักหลาม ;-)
โอ้โห

2
นั่นคือเหตุผลที่ฉันถาม - อย่าทำด้วยตัวเองใช้os.path.joinและปล่อยให้ไลบรารีมาตรฐานหาตัวคั่นเส้นทางที่ถูกต้อง
Tim Pietzcker

2
@ S.Lott ฉันจะไม่คิดว่าสิ่งนี้ 'ไม่ดี' คำถามนั้นเป็นคำถามที่ถูกต้องโดยตัวมันเอง เป็นเพียงส่วนหนึ่งของคำถามที่ใหญ่กว่า (อาจพูดจริง)
ohho

6
อย่างไรก็ตามคำถามอาจยังคงเป็นที่สนใจทั้งนี้ขึ้นอยู่กับสิ่งที่คุณกำลังทำอยู่ ตัวอย่างเช่นหากคุณใช้ Python เพื่อจัดหาอินพุตให้กับโปรแกรมอื่นคุณอาจมีกรณีที่อาร์กิวเมนต์ต้องการพา ธ ที่สิ้นสุดด้วยเครื่องหมายทับ นั่นอาจอยู่นอกเหนือการควบคุมของคุณ และเป็นกรณีการใช้งานที่สมบูรณ์แบบสำหรับคำตอบของ Marco ด้านล่าง
Chris Krycho

คำตอบ:


180

os.path.join(path, '') จะเพิ่มเครื่องหมายทับถ้ายังไม่มี

คุณสามารถทำได้os.path.join(path, '', '')หรือos.path.join(path_with_a_trailing_slash, '')และคุณจะยังคงได้รับเพียงหนึ่งเครื่องหมายทับ


2
เพิ่มเครื่องหมายทับเมื่อpathเป็นไฟล์แทนที่จะเป็นไดเร็กทอรี ไม่สะดวกเล็กน้อย
Martin

27

เนื่องจากคุณต้องการเชื่อมต่อไดเร็กทอรีและชื่อไฟล์ให้ใช้

os.path.join(directory, filename)

หากคุณต้องการกำจัด.\..\..\blah\เส้นทางให้ใช้

os.path.join(os.path.normpath(directory), filename)

11

คุณสามารถทำได้ด้วยตนเองโดย:

path = ...

import os
if not path.endswith(os.path.sep):
    path += os.path.sep

อย่างไรก็ตามโดยปกติแล้วการใช้จะสะอาดos.path.joinกว่ามาก


-1

คุณสามารถใช้สิ่งนี้:

os.path.normcase(path)
    Normalize the case of a pathname. On Unix and Mac OS X, this returns the path unchanged; on case-insensitive filesystems, it converts the path to lowercase. On Windows, it also converts forward slashes to backward slashes.

คุณสามารถมองหาอย่างอื่นในหน้านี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.