Đường dẫn Windows trong Python


152

Cách tốt nhất để đại diện cho một thư mục Windows, ví dụ là "C:\meshes\as"gì? Tôi đã cố gắng sửa đổi một kịch bản nhưng nó không bao giờ hoạt động vì dường như tôi không thể lấy đúng thư mục, tôi giả sử vì '\'đóng vai là nhân vật thoát?

Câu trả lời:


220

bạn có thể sử dụng luôn:

'C:/mydir'

cái này hoạt động cả trong linux và windows. Khả năng khác là

'C:\\mydir'

nếu bạn gặp vấn đề với một số tên, bạn cũng có thể thử chuỗi ký tự thô:

r'C:\mydir'

tuy nhiên cách tốt nhất là sử dụng các os.pathchức năng mô-đun luôn chọn cấu hình đúng cho hệ điều hành của bạn:

os.path.join(mydir, myfile)

Từ python 3,4, bạn cũng có thể sử dụng mô-đun pathlib . Điều này tương tự như trên:

pathlib.Path(mydir, myfile)

hoặc là

pathlib.Path(mydir) / myfile

2
@Gareth, tôi rất lười biếng và thường thấy mình sử dụng '/'. Tuy nhiên về lâu dài việc sử dụng os.path thuận tiện hơn. Nó cũng cho phép bạn sử dụng mydir và myfile như các biến mà bạn có thể dễ dàng sửa đổi.
joaquin

13
Điều duy nhất cần cẩn thận với các chuỗi thô là chúng không thể kết thúc bằng \
Douglas Leeder

Bạn có thể sử dụng os.path.join () để loại bỏ nhu cầu kết thúc đường dẫn với \.
Will Ediger

1
Tôi thích cú pháp r (chuỗi thô). Hữu ích nếu bạn đang sao chép một con đường dài mà bạn thường phải thay thế tất cả các dấu gạch chéo ngược bằng dấu gạch chéo về phía trước
peterb

chuỗi thô có thể kết thúc bằng \\ để chúng ta có thể ghép một tệp vào đường dẫn: codecs.open (r "C: \ maXbox \ EKON24 \ tweet_data \\" + file, 'r', mã hóa = 'utf-8') như f:
Max Kleiner

20

Sử dụng os.pathmô-đun.

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

Hoặc sử dụng chuỗi thô

r"C:\meshes\as"

Tôi cũng sẽ đề nghị không có khoảng trắng trong đường dẫn hoặc tên tệp. Và bạn có thể sử dụng dấu gạch chéo kép trong chuỗi của mình.

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

11
os.path.join có thể không hoạt động như bạn mong đợi khi một thành phần là ký tự ổ đĩa, vì các đường dẫn tương đối được cho phép ngay cả sau đó. (Kết quả của dòng đầu tiên là 'C: lưới \ như' trên Windows.)
dash-tom-bang

Nhận xét của @ dash-tom-bang là thực sự quan trọng. Là điều đúng đắn để làm "C:\"như là mục đầu tiên? Điều đó có làm xáo trộn một số sự sạch sẽ của việc sử dụng join?
Jack O'Connor

1
@ JackO'Connor đó là những gì tôi làm. Bạn chắc chắn không muốn đặt "C:\"ở giữa tên tệp. Ngoài ra, bạn có thể sử dụng os.path.normpathtrước hoặc sau khi tham gia, để đảm bảo đường dẫn được in độc đáo.
Agostino

nhưng nó cũng không hoạt động. Những gì hoạt động làos.path.join( "C:\\", "meshes", "as" )
Jean-François Fabre

17

Có, \trong chuỗi ký tự Python biểu thị sự bắt đầu của một chuỗi thoát. Trong đường dẫn của bạn, bạn có một chuỗi thoát hai ký tự hợp lệ \a, được thu gọn thành một ký tự đó là ASCII Bell :

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

Các chuỗi thoát phổ biến khác bao gồm \t(tab), \n(nguồn cấp dữ liệu), \r(trả lại vận chuyển):

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

Như bạn có thể thấy, trong tất cả các ví dụ này, dấu gạch chéo ngược và ký tự tiếp theo trong nghĩa đen được nhóm lại với nhau để tạo thành một ký tự duy nhất trong chuỗi cuối cùng. Danh sách đầy đủ các chuỗi thoát của Python có ở đây .

Có nhiều cách khác nhau để đối phó với điều đó:

  1. Python sẽ không xử lý các chuỗi thoát trong chuỗi ký tự có tiền tố bằng rhoặcR :

    >>> r'C:\meshes\as'
    'C:\\meshes\\as'
    >>> print(r'C:\meshes\as')
    C:\meshes\as
  2. Python trên Windows cũng nên xử lý các dấu gạch chéo về phía trước.

  3. Bạn có thể sử dụng os.path.join...

    >>> import os
    >>> os.path.join('C:', os.sep, 'meshes', 'as')
    'C:\\meshes\\as'
  4. ... hoặc mô-đun mới hơnpathlib

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

-1

Sử dụng PowerShell

Trong Windows, bạn có thể sử dụng /trong đường dẫn của mình giống như Linux hoặc macOS ở mọi nơi miễn là bạn sử dụng PowerShell làm giao diện dòng lệnh. Nó được cài đặt sẵn trên Windows và nó hỗ trợ nhiều lệnh Linux như lslệnh.

Nếu bạn sử dụng Windows Command Prompt (cái xuất hiện khi bạn nhập cmdvào Menu Bắt đầu của Windows), bạn cần chỉ định các đường dẫn \chỉ bên trong nó. Bạn có thể sử dụng /các đường dẫn ở tất cả các nơi khác (trình soạn thảo mã, chế độ tương tác Python, v.v.).


-1

Trong trường hợp bạn muốn dán đường dẫn windows từ nguồn khác (giả sử File Explorer) - bạn có thể thực hiện thông qua input()cuộc gọi trong bảng điều khiển python:

>>> 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'

Sau đó chỉ cần sao chép kết quả

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.