2013-06-12 50 views
51

Tôi đã thấy giải pháp này nhưng không phải cho Python cụ thể.Python - Trích xuất đường dẫn thư mục từ đường dẫn tập tin

Tôi muốn chỉ nhận đường dẫn thư mục từ đường dẫn đầy đủ đến tệp.

Ví dụ T:\Data\DBDesign\DBDesign_93_v141b.mdb và tôi muốn chỉ nhận được T:\Data\DBDesign (không bao gồm \DBDesign_93_v141b.mdb).

Tôi đã thử một cái gì đó như thế này:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb' 
wkspFldr = str(existGDBPath.split('\\')[0:-1]) 
print wkspFldr 

nhưng nó đã cho tôi một kết quả như thế này:

['T:', 'Data', 'DBDesign'] 

mà không phải là kết quả mà tôi yêu cầu (là T:\Data\DBDesign).

Bất kỳ ý tưởng nào về cách tôi có thể lấy đường dẫn đến tệp của mình?

Cảm ơn.

Trả lời

71

Bạn gần như đã sử dụng chức năng split. Bạn chỉ cần tham gia các chuỗi, như sau.

>>> '\\'.join(existGDBPath.split('\\')[0:-1]) 
'T:\\Data\\DBDesign' 

Mặc dù, tôi khuyên bạn nên sử dụng chức năng os.path.dirname để thực hiện việc này, bạn chỉ cần chuyển chuỗi và nó sẽ thực hiện công việc cho bạn. Vì bạn dường như đang ở trên các cửa sổ, hãy cân nhắc sử dụng hàm abspath. Một ví dụ -

>>> os.path.dirname(os.path.abspath(existGDBPath)) 
'T:\\Data\\DBDesign' 

Nếu bạn muốn cả hai tên file và đường dẫn thư mục sau khi được tách ra, bạn có thể sử dụng os.path.split chức năng mà trả về một tuple, như sau.

>>> os.path.split(os.path.abspath(existGDBPath)) 
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb') 
+0

Brilliant, cảm ơn rất nhiều sự giúp đỡ của bạn ở đây. Điều này đã rất thông tin. Tôi sẽ sử dụng tùy chọn abspath. – Genspec

16

Mô-đun con tích hợp os.path có chức năng cho nhiệm vụ đó.

import os 
os.path.dirname('T:\Data\DBDesign\DBDesign_93_v141b.mdb') 
36

Sử dụng các mô-đun os.path:

>>> import os 
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb' 
>>> wkspFldr = os.path.dirname(existGDBPath) 
>>> print wkspFldr 
'T:\Data\DBDesign' 

Bạn có thể đi trước và cho rằng nếu bạn cần phải làm một số loại thao tác filename nó đã được thực hiện trong os.path. Nếu không, bạn vẫn có thể cần phải sử dụng mô-đun này làm khối xây dựng.

CẬP NHẬT

Người ta phải xem xét sử dụng pathlib cho sự phát triển mới. Đó là trong stdlib cho Python3.4, nhưng available on PyPI cho các phiên bản trước đó. Thư viện này cung cấp một phương thức nhiều đối tượng hơn để thao tác với đường dẫn <opinion> và dễ đọc và chương trình dễ dàng hơn nhiều với </opinion>.

>>> import pathlib 
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb') 
>>> wkspFldr = existGDBPath.parent 
>>> print wkspFldr 
Path('T:\Data\DBDesign') 
0

Đây là mã:

import os 
existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb' 
wkspFldr = os.path.dirname(existGDBPath) 
print wkspFldr # T:\Data\DBDesign 
Các vấn đề liên quan