2012-04-05 30 views
5

Giả sử đường dẫn của tập tin 'file1.txt' là /home/bentley4/Desktop/sc/file1.txt Giả sử thư mục làm việc hiện tại của tôi là /home/bentley4os.path.abspath ('file1.txt') không trả lại đúng đường dẫn

import os 
os.path.abspath('file1.txt') 

trả về /home/bentley4/file1.txt

os.path.exists('file1.txt') 

trả về False. Nếu tôi làm

os.path.abspath('file_that_does_not_exist.txt') 

Nó trả /home/bentley4/file_that_does_not_exist.txt Nhưng một lần nữa, điều này là không đúng. Tệp thậm chí không tồn tại trên máy tính của tôi. Có cách nào để có được đường dẫn tuyệt đối chính xác từ bất kỳ thư mục nào mà tôi hiện đang làm việc không? (ngoài việc xác định chức năng mới)

Vì vậy, điều này chỉ hoạt động khi tôi ở cùng thư mục với tệp hiện có hoặc trong thư mục một thư mục hoặc xa hơn từ đường dẫn của thư mục của tệp đó?

+3

Khá tò mò, 'os.path.abspath' chỉ hoạt động. 'Os.getcwd()' trả về là gì? ... Oh, d'oh, cứ tiếp tục, bạn đang nói rằng bạn đang ở trong '/ home/bentley4' và bạn đang mong đợi' os.path.abspath' bằng cách nào đó tìm thấy một tập tin trong một thư mục con của nó ? Nó không làm điều đó. – torek

+0

Bạn đang cố gắng làm gì? Bạn đang cố tìm một tệp theo tên trong bất kỳ thư mục con nào của thư mục làm việc hiện tại của bạn? –

Trả lời

11

os.path.abspath(filename) trả lại đường dẫn tuyệt đối như được thấy từ thư mục làm việc hiện tại của bạn. Nó không kiểm tra xem các tập tin thực sự tồn tại.

Nếu bạn muốn đường dẫn tuyệt đối của /home/bentley4/Desktop/sc/file1.txt và bạn đang ở trong /home/bentley4, bạn sẽ phải sử dụng os.path.abspath("Desktop/sc/file1.txt").

+2

Vâng, nó bắt đầu bằng cách kiểm tra 'os.path.isabs()'. Nhưng trong trường hợp này, có. – torek

1

abspath chỉ xây dựng đường dẫn, nó không kiểm tra bất kỳ điều gì về các tệp hiện có.

Từ các tài liệu:

Trên hầu hết các nền tảng, đây là tương đương với normpath (tham gia (os.getcwd(), đường dẫn)).

0

Bạn sẽ nhận được đường dẫn với os.path.abspath(__file__).

+0

Điều này không hoạt động. os.path.abspath ('__ file1.txt__') hoạt động giống như os.path.abspath ('file1.txt'). – Bentley4

+3

@ Bentley4 os.path.abspath ('file1.txt') sẽ luôn hoạt động giống như os.path.abspath ('file1.txt') miễn là Python sống ... – JSmyth

0

Vấn đề phải là trước đó cwd đã được thay đổi bằng cách sử dụng os.chdir (another_path) và nó vẫn được tải trong ngữ cảnh của thực thi hiện tại. để sửa chữa nên được khôi phục lại đường dẫn ban đầu sau khi sử dụng nhiệm vụ trong another_path đã kết thúc.
Ví dụ:

original_path = os.getcwd() 
    os.chdir(another_path) 
    # here perform some operation over another_path 
    os.chdir(original_path) # here is the restore of the original path 
Các vấn đề liên quan