2012-01-13 32 views
5

Tôi có một danh sách các thư mục được mã hóa cứng vào chương trình của tôi như vậy:Thư mục Đăng nhập với tư Strings trong python

import os 
my_dirs = ["C:\a\foo" 
      ,"C:\b\foo" 
      ,"C:\c\foo" 
      ,"C:\t\foo" 
      ] 

sau, tôi muốn thực hiện một số hoạt động như os.path.isfile(my_dirs[3]). Nhưng chuỗi my_dirs [3] đang trở nên sai lầm bởi vì "\t" là viết tắt của tab hoặc một cái gì đó.

Tôi biết rằng một giải pháp này sẽ được sử dụng này:

my_dirs = ["C:\\a\\foo" 
      ,"C:\\b\\foo" 
      ,"C:\\c\\foo" 
      ,"C:\\t\\foo" 
      ] 

Và một giải pháp khác sẽ được sử dụng phía trước dấu gạch chéo.

Nhưng tôi thích có thể sao chép các thư mục trực tiếp từ trình khám phá sang mã Python của tôi. Có cách nào tôi có thể nói với Python không để biến "\t" thành một tab hoặc một số giải pháp khác cho vấn đề của tôi?

Trả lời

8

Sử dụng dấu gạch chéo hoặc chuỗi liệu: r'C:\a\foo' hoặc 'C:/a/foo'

Trên thực tế, sử dụng dấu gạch chéo là giải pháp tốt hơn kể từ khi @Wesley đề cập, bạn không thể có một chuỗi nguyên kết thúc bằng một dấu gạch chéo duy nhất. Trong khi chức năng từ os.path sẽ sử dụng dấu gạch chéo ngược trên cửa sổ, trộn chúng không gây ra bất kỳ sự cố nào - vì vậy tôi khuyên bạn nên sử dụng dấu gạch chéo ở đường dẫn mã cứng và không quan tâm đến các dấu gạch chéo ngược được giới thiệu bởi các hàm từ os.path.

Đừng quên rằng đường dẫn mã cứng là một điều xấu cho mỗi lần truy cập. Đặc biệt nếu bạn sử dụng các thư mục hệ thống (bao gồm "My Documents" và "AppData"), bạn nên sử dụng các hàm WinAPI để lấy chúng bất kể chúng ở đâu.

+0

tôi đã được lập trình bằng Python cho một vài tháng nay và tôi không biết về chuỗi nguyên . Rất hữu ích, cảm ơn. – Derek

8

Tôi khuyên bạn nên sử dụng dấu gạch chéo về phía trước hoặc dấu gạch chéo ngược kép. Một chuỗi thô, như sugested bởi ThiefMaster, có thể được khôn lanh; nó có thể, ví dụ, không kết thúc bằng dấu gạch chéo ngược; nên r'c: \ foo \' là không một chuỗi nguyên hợp lệ .. Xem python docs:

r '\' không phải là một chuỗi giá trị theo nghĩa đen (thậm chí là một chuỗi nguyên không thể kết thúc trong một số lẻ các dấu gạch chéo ngược). Cụ thể, một chuỗi nguyên không thể kết thúc trong một dấu chéo ngược đơn (kể từ khi xuyệc ngược sẽ thoát khỏi quote ký tự sau)

+0

Điểm tốt. Nó xảy ra rằng tất cả các thư mục của tôi trong thực tế sẽ là các tập tin kết thúc bằng .txt hoặc .pdf hoặc một cái gì đó, vì vậy tôi nghĩ rằng nó là an toàn cho tôi để sử dụng chuỗi thô trong trường hợp này. Nó giải quyết vấn đề chính của tôi chỉ muốn sao chép và dán thư mục từ Windows Explorer. – Derek

+1

Chuyển tiếp slashes có một bất lợi mặc dù: Ngay sau khi bạn sử dụng ['os.path.join()'] (http://docs.python.org/library/os.path.html#os.path.join) và các phương pháp tương tự, chúng sẽ giới thiệu các dấu gạch chéo ngược. Sự pha trộn trông xấu xí nhưng nếu bạn không bao giờ hiển thị nó cho người dùng mà không bình thường hóa các dấu gạch chéo thì không quan trọng. Nếu bạn phải hiển thị nó cho người dùng, hãy xem xét sử dụng ['os.path.normpath()'] (http://docs.python.org/library/os.path.html#os.path.normpath) trước tiên – ThiefMaster

+0

@ThiefMaster Một chuỗi thay thế sau đó sẽ chăm sóc đó. Không đẹp, nhưng tốt hơn là để lại chuỗi hỗn hợp trong sự tồn tại. – Mast

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