2013-09-28 51 views
11

Tôi đang đối mặt với một vấn đề rất cơ bản khi sử dụng đường dẫn thư mục trong tập lệnh python. Khi tôi làm đường dẫn sao chép từ cửa sổ thám hiểm, nó sử dụng dấu gạch chéo ngược là đường dẫn seperator đang gây ra vấn đề.Đường dẫn cửa sổ Python cắt giảm

>>> x 
'D:\testfolder' 
>>> print x 
D:  estfolder 
>>> print os.path.normpath(x) 
D:  estfolder 
>>> print os.path.abspath(x) 
D:\  estfolder 
>>> print x.replace('\\','/') 
D:  estfolder 

Một số người có thể giúp tôi khắc phục sự cố này.

+0

Chuyển tiếp dấu gạch chéo được hiểu trên tất cả các hệ điều hành - nhưng 'normpath' trên cửa sổ không sử dụng' \\ '. Cá nhân tôi thấy dễ nhất khi sử dụng các phương thức 'path' để kết hợp/quản lý các đường dẫn và sau đó cuối cùng thay thế từ' \\ 'thành'/'để nhất quán giữa các hệ thống. Bạn không chắc liệu câu trả lời đó có đúng không? – Basic

+4

bạn có thể thêm r trước chuỗi này, ví dụ: x = r'D: \ testfolder 'và x sẽ là "D: \ testfolder". thêm một 'r' trước khi một chuỗi cho thấy chuỗi này là một chuỗi thô. – Mark

Trả lời

12

Python diễn giải một số \t trong chuỗi dưới dạng ký tự tab; do đó, "D:\testfolder" sẽ in ra với một tab giữa các :e, như bạn nhận thấy. Nếu bạn muốn một dấu chéo ngược thực tế, bạn cần phải thoát dấu chéo ngược bằng cách nhập nó như \\:

>>> x = "D:\\testfolder" 
>>> print x 
D:\testfolder 

Tuy nhiên, để tương thích đa nền tảng, bạn nên có lẽ sử dụng os.path.join. Tôi nghĩ rằng Python trên Windows sẽ tự động xử lý các dấu gạch chéo (/) đúng cách.

+7

Chỉ cần sử dụng dấu gạch chéo về phía trước sẽ hoạt động trong các cửa sổ - 'os.path.join()' rõ ràng là giải pháp mạnh nhất. –

+9

Hoặc, bạn có thể sử dụng [chuỗi ký tự nguyên] (http://docs.python.org/2/reference/lexical_analysis.html#string-literals) bằng cách đặt trước một chuỗi «r' để các chuỗi thoát không được diễn giải, ví dụ: 'r" D: \ testfolder "'. –

+2

@AdamRosenfield Chuỗi thô không phù hợp với đường dẫn cửa sổ. https://pythonconquerstheuniverse.wordpress.com/2008/06/04/gotcha-%E2%80%94-backslashes-in-windows-filenames/ –

Các vấn đề liên quan