2010-07-10 28 views
45

khi tôi cung cấp cho ls -l /etc/fonts/conf.d/70-yes-bitmaps.conflàm thế nào để tìm thấy đầy đủ (đường dẫn tuyệt đối) các tập tin mục tiêu của liên kết tượng trưng hoặc liên kết mềm trong python

lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf 

như vậy cho một liên kết tượng trưng hoặc liên kết mềm, làm thế nào để tìm thấy đầy đủ (đường dẫn tuyệt đối) các tập tin mục tiêu trong python,

Nếu tôi sử dụng

os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')

nó ra

../conf.avail/70-yes-bitmaps.conf

nhưng tôi cần đường dẫn tuyệt đối không phải là đường dẫn tương đối, vì vậy sản lượng của tôi mong muốn phải,

/etc/fonts/conf.avail/70-yes-bitmaps.conf

làm thế nào để thay thế .. với đường dẫn thực tế đầy đủ của thư mục cha của liên kết tượng trưng hoặc tệp liên kết mềm.

Trả lời

8

http://docs.python.org/library/os.path.html#os.path.abspath

cũng joinpath và normpath, tùy thuộc vào việc bạn đang ở trong thư mục làm việc hiện tại, hoặc bạn đang làm việc với những thứ khác. normpath có thể trực tiếp hơn cho bạn.

Cập nhật:

cụ thể:

os.path.normpath( 
    os.path.join( 
    os.path.dirname('/etc/fonts/conf.d/70-yes-bitmaps.conf'), 
    os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf') 
) 
) 
+2

Được cảnh báo mặc dù: bạn phải vượt qua một con đường mà không phải là một liên kết tượng trưng đến readlink nó sẽ nổi giận và đưa ra ngoại lệ sau đây: 'OSError: [Errno 22 ] Đối số không hợp lệ: 'your-path'' – Diego

76
os.path.realpath(path) 

os.path.realpath trả về con đường kinh điển của tên tập tin cụ thể, loại bỏ bất kỳ liên kết tượng trưng gặp trong đường dẫn.

+1

os.path.realpath không loại bỏ các liên kết tượng trưng trong Python 3.2 trong Windows 7. (Một lỗi?) –

+1

Hmmm ... Tôi thấy rằng đây là lỗi mở trong 1,5 năm: http://bugs.python.org/issue9949 –

+1

Yup nhận được cùng một vấn đề này, 3 năm sau: c – Coburn

12

Như unutbu nói, os.path.realpath (đường dẫn) phải là câu trả lời đúng, trả lại đường dẫn chuẩn của tên tệp được chỉ định, giải quyết mọi liên kết tượng trưng đến mục tiêu của chúng. Nhưng nó bị hỏng trong Windows.

tôi đã tạo ra một bản vá cho Python 3.2 để sửa lỗi này, và tải lên nó để:

http://bugs.python.org/issue9949

Nó sửa chữa chức năng realpath trong Python32 \ Lib \ ntpath.py

tôi đã cũng đặt nó trên máy chủ của tôi, ở đây:

http://www.burtonsys.com/ntpath_fix_issue9949.zip

Thật không may, lỗi này là hiện diện trong Py thon 2.x, quá, và tôi biết không có sửa chữa cho nó ở đó.

0

Các documentation nói để sử dụng os.path.join():

The result may be either an absolute or relative pathname; if it is relative, it may be converted to an absolute pathname using os.path.join(os.path.dirname(path), result) .

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