2011-07-11 42 views
5

Tôi mới dùng Python nên tôi có thể sắp sửa hoàn toàn sai, nhưng tôi gặp sự cố khi nhận và thay đổi thư mục của tệp. Kịch bản của tôi có nhiều tên tệp có thể nằm trong bất kỳ thư mục nào. Trong kịch bản của tôi, tôi cần python để thay đổi vào thư mục của tập tin và sau đó thực hiện một số hành động. Tuy nhiên, tôi đang gặp sự cố khi thay đổi thư mục.Định dạng Đường dẫn Tệp

Dưới đây là những gì tôi đã cố gắng cho đến nay:

path=os.path.split(<file path>) 
os.chdir(path[0]) 
<Do things to file specified by path[1]> 

Con đường tôi đã nhận được các đường dẫn tập tin là bằng cách kéo từ nhà thám hiểm vào dòng lệnh. Điều này nhập tên đường dẫn như một cái gì đó như "C:\foo\bar\file_name.txt". Khi tôi chạy dòng đầu tiên trong thông dịch viên, tôi lấy ra ('C:\\foo\bar','file_name.txt'). Vấn đề là vì một lý do nào đó, dấu gạch chéo ngược cuối cùng không được tự động thoát vì vậy khi tôi chạy dòng os.chdir(path[0]) tôi gặp lỗi.

Câu hỏi của tôi là tại sao dấu gạch chéo ngược cuối cùng không tự động được thoát như những người khác? Làm thế nào tôi có thể tự thoát khỏi dấu gạch chéo ngược cuối cùng? Có cách nào tốt hơn để có được thư mục của tập tin và thay đổi nó?

+0

Có một chút bất thường (mặc dù không phải lúc nào cũng sai) để thoát ra khỏi python để chạy mọi thứ tại dấu nhắc lệnh. Chính xác thì "thực hiện một số hành động" là gì? Có lẽ chúng chỉ có thể được thực hiện bằng Python trực tiếp. – Gerrat

+0

Tôi không nghĩ rhololkeolke đang thoát khỏi vỏ Python; bạn vẫn có thể kéo các tập tin vào cửa sổ giao diện điều khiển để có được đường dẫn trong khi bên trong vỏ, như tôi vừa mới nhận thấy. Tất nhiên ngay cả khi bạn đã phải làm một cái gì đó bên ngoài trình bao, nếu nó chỉ là một hành động duy nhất, bạn chỉ có thể sử dụng 'os.system()'. Và thậm chí nếu nó là nhiều hành động, nếu nó là một cái gì đó lặp đi lặp lại thường xuyên, bạn cũng có thể viết một tập tin thực thi và gọi đó bằng cách sử dụng 'os.system()'. Tất nhiên không ai trong số đó phải làm gì với những gì rhololkeolke đang hỏi. – JAB

Trả lời

5

Dấu gạch chéo ngược cuối cùng không bị tự động thoát vì Python chỉ thoát dấu gạch chéo ngược trong chuỗi thông thường khi ký tự sau không tạo thành chuỗi thoát bằng dấu gạch chéo ngược. Trong thực tế, trong ví dụ của bạn, bạn sẽ KHÔNG nhận được 'C:\\foo\bar' từ 'C:\foo\bar', bạn sẽ nhận được 'C:\x0coo\x08ar'.

Điều bạn muốn làm là thay thế các dấu gạch chéo ngược với tiền tố hoặc để đơn giản hơn cho thao tác kéo và thả, chỉ cần thêm đường dẫn với r sao cho đó là chuỗi thô và không nhận ra chuỗi thoát .

>>> os.path.split(r"C:\foo\bar\file_name.txt") 
('C:\\foo\\bar','file_name.txt') 
+0

Cảm ơn. Hoạt động hoàn hảo ngay bây giờ. – rhololkeolke

+0

Bạn được chào đón. – JAB

2

Bạn đang sử dụng đúng mô-đun và phương pháp. Chỉ khi bạn đang đặt con đường cửa sổ trong đó, làm cho chuỗi một chuỗi nguyên, do đó, lệnh của bạn sẽ giống như thế:

path=os.path.split(r'C:\foo\bar\file_name.txt') 

Lưu ý r ở phía trước của quote đầu tiên, mà làm cho Python không đối xử với backslashes trong chuỗi như chuỗi thoát.

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