เส้นทาง Windows ใน Python


152

วิธีที่ดีที่สุดในการแสดงไดเรกทอรี Windows "C:\meshes\as"คืออะไร ฉันพยายามปรับเปลี่ยนสคริปต์ แต่มันไม่ทำงานเพราะฉันดูเหมือนจะไม่ได้รับไดเรกทอรีที่ถูกต้องฉันคิดว่าเป็นเพราะ'\'ตัวละครที่หลบหนี?

คำตอบ:


220

คุณสามารถใช้งานได้ตลอดเวลา:

'C:/mydir'

ใช้ได้ทั้งใน linux และ windows ตำแหน่งอื่น ๆ คือ

'C:\\mydir'

หากคุณมีปัญหากับชื่อบางชื่อคุณสามารถลองใช้ตัวอักษรสตริงดิบได้:

r'C:\mydir'

อย่างไรก็ตามวิธีปฏิบัติที่ดีที่สุดคือการใช้os.pathฟังก์ชั่นโมดูลที่เลือกการตั้งค่าที่ถูกต้องสำหรับระบบปฏิบัติการของคุณเสมอ:

os.path.join(mydir, myfile)

จาก python 3.4 คุณสามารถใช้โมดูลpathlib นี่คือสิ่งที่เท่าเทียมกับข้างต้น:

pathlib.Path(mydir, myfile)

หรือ

pathlib.Path(mydir) / myfile

2
@ Gareth ฉันขี้เกียจมากและมักจะพบว่าตัวเองใช้ '/' อย่างไรก็ตามในระยะยาวการใช้ os.path นั้นสะดวกกว่า นอกจากนี้ยังช่วยให้คุณใช้ mydir และ myfile เป็นตัวแปรที่คุณสามารถแก้ไขได้อย่างง่ายดาย
joaquin

13
สิ่งเดียวที่ต้องระวังในสายอักขระดิบคือพวกเขาไม่สามารถลงท้ายด้วย \
Douglas Leeder

คุณสามารถใช้ os.path.join () เพื่อลบความต้องการที่จะจบเส้นทางด้วย \
Will Ediger

1
ฉันชอบไวยากรณ์ r (สตริงดิบ) มีประโยชน์หากคุณกำลังคัดลอกเส้นทางที่ยาวซึ่งโดยปกติคุณจะต้องแทนที่แบ็กสแลชทั้งหมดด้วยสแลช
ฟอร์แมต

สตริงดิบสามารถลงท้ายด้วย \\ เพื่อให้เราสามารถเชื่อมไฟล์ไปยังเส้นทาง: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + ไฟล์, 'r', การเข้ารหัส = 'utf-8') เป็น f:
Max Kleiner

20

ใช้os.pathโมดูล

os.path.join( "C:", "meshes", "as" )

หรือใช้สตริงดิบ

r"C:\meshes\as"

ฉันจะแนะนำไม่มีช่องว่างในเส้นทางหรือชื่อไฟล์ และคุณสามารถใช้แบ็กสแลชสองครั้งในสตริงของคุณ

"C:\\meshes\\as.jpg"

11
os.path.join อาจไม่ทำงานอย่างที่คุณคาดไว้เมื่อส่วนประกอบคือตัวอักษรชื่อไดรฟ์เนื่องจากอนุญาตให้ใช้พา ธ สัมพัทธ์ได้ (ผลลัพธ์ของบรรทัดแรกคือ 'C: meshes \\ as' บน Windows)
dash-tom-bang

ความคิดเห็นของ @ dash-tom-bang นั้นสำคัญมาก สิ่งที่ถูกต้องที่จะทำเพื่อ"C:\"เป็นรายการแรกคืออะไร? ความยุ่งเหยิงของการใช้งานนั้นเป็นสิ่งที่joinไม่สะอาดหรือเปล่า?
Jack O'Connor

1
@ JackO'Connor นั่นคือสิ่งที่ฉันทำ แน่นอนคุณไม่ต้องการใส่"C:\"ชื่อไฟล์ตรงกลาง นอกจากนี้คุณสามารถใช้os.path.normpathก่อนหรือหลังการเข้าร่วมเพื่อให้แน่ใจว่าเส้นทางได้รับการพิมพ์อย่างดี
Agostino

แต่มันก็ไม่ทำงานเหมือนกัน ผลงานคืออะไรos.path.join( "C:\\", "meshes", "as" )
Jean-François Fabre

17

ใช่\ในตัวอักษรของสตริงไพ ธ อนแสดงถึงจุดเริ่มต้นของลำดับการหลีกเลี่ยง ในเส้นทางของคุณคุณมีลำดับการหลบหนีสองตัวอักษรที่ถูกต้อง\aซึ่งจะถูกยุบเป็นอักขระหนึ่งตัวที่เป็นASCII Bell :

>>> '\a'
'\x07'
>>> len('\a')
1
>>> 'C:\meshes\as'
'C:\\meshes\x07s'
>>> print('C:\meshes\as')
C:\meshess

ลำดับการหลีกเลี่ยงทั่วไปอื่น ๆ ได้แก่\t(แท็บ), \n(ฟีดบรรทัด), (การขึ้นบรรทัดใหม่\r):

>>> list('C:\test')
['C', ':', '\t', 'e', 's', 't']
>>> list('C:\nest')
['C', ':', '\n', 'e', 's', 't']
>>> list('C:\rest')
['C', ':', '\r', 'e', 's', 't']

อย่างที่คุณเห็นในแบ็กสแลชทั้งหมดและอักขระถัดไปในตัวอักษรถูกจัดกลุ่มเข้าด้วยกันเพื่อสร้างอักขระตัวเดียวในสตริงสุดท้าย รายการเต็มรูปแบบของงูใหญ่ลำดับหนีเป็นที่นี่

มีหลายวิธีที่จะจัดการกับสิ่งนั้น:

  1. Python จะไม่ประมวลผล escape sequences ในสตริงตัวอักษรนำหน้าด้วยrหรือR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. Python บน Windows ควรรองรับเครื่องหมายสแลชเช่นกัน

  3. คุณสามารถใช้os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... หรือโมดูลที่ใหม่กว่าpathlib

    >>> from pathlib import Path
    >>> Path('C:', '/', 'meshes', 'as')
    WindowsPath('C:/meshes/as')

-1

ใช้ PowerShell

ใน Windows คุณสามารถใช้/ในพา ธ ของคุณเช่นเดียวกับ Linux หรือ macOS ในทุกสถานที่ตราบใดที่คุณใช้ PowerShellเป็นอินเตอร์เฟสบรรทัดคำสั่งของคุณ มันติดตั้งมาพร้อมกับ Windows และรองรับคำสั่ง Linuxมากมายเช่นlsคำสั่ง

หากคุณใช้พรอมต์คำสั่งของ Windows (อันที่ปรากฏขึ้นเมื่อคุณพิมพ์cmdในเมนูเริ่มของ Windows) คุณจะต้องระบุพา ธ ที่\อยู่ข้างใน คุณสามารถใช้พา ธ/ในสถานที่อื่น ๆ ทั้งหมด (โปรแกรมแก้ไขโค้ดโหมด Python และอื่น ๆ )


-1

ในกรณีที่คุณต้องการวาง windows path จากแหล่งอื่น (เช่น File Explorer) - คุณสามารถทำได้ผ่านการinput()โทรในคอนโซลหลาม:

>>> input()
D:\EP\stuff\1111\this_is_a_long_path\you_dont_want\to_type\or_edit_by_hand
'D:\\EP\\stuff\\1111\\this_is_a_long_path\\you_dont_want\\to_type\\or_edit_by_hand'

จากนั้นคัดลอกผลลัพธ์

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