Os.path.abspath(__file__) python

Các hệ điều hành như Windows, Linux hoặc macOS có các cấu trúc đường dẫn khác nhau trong đó các tệp hệ điều hành được lưu trữ

Do đó, khi bạn chạy tập lệnh Python trên các máy này và muốn tìm nạp tệp hoặc thư mục, bạn muốn tự động tìm đường dẫn tuyệt đối của tệp so với thư mục hiện tại thay vì mã hóa cứng nó cho mọi hệ thống

Đường dẫn tuyệt đối còn được gọi là đường dẫn đầy đủ và bắt đầu bằng

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
6 trong Linux và macOS và
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
7 trên Windows

Để tìm đường dẫn tuyệt đối trong Python, bạn nhập mô-đun

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
8, sau đó bạn có thể tìm thư mục làm việc hiện tại bằng cách sử dụng
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
9 trong tập lệnh Python của mình

Mục lục

1

Đường dẫn tuyệt đối trong Python là gì?

Đường dẫn tuyệt đối trong Python là đường dẫn đầy đủ bắt đầu từ thư mục gốc của hệ thống tệp điều hành cho đến thư mục làm việc

Vì vậy, giả sử bạn chạy mã Python của mình trong

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0. Đây là điểm vào nơi bạn chạy mã cấp cao nhất của mô-đun python của mình

Sau đó, đây là đường dẫn tuyệt đối của thư mục làm việc của bạn

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
1

Cách tìm đường dẫn tuyệt đối trong Python

Như đã đề cập ở đầu bài viết này, bạn có thể chạy ứng dụng Python của mình trên các hệ điều hành khác nhau, do đó bạn muốn tự động tìm đường dẫn đầy đủ của tệp bạn muốn nhập trong mã của mình thay vì mã hóa cứng nó

Vì vậy, với một đường dẫn chẳng hạn như 

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
2, làm thế nào để bạn tìm thấy đường dẫn tuyệt đối của tệp so với thư mục làm việc hiện tại (
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
1) trong Python?

Để có được đường dẫn tuyệt đối trong Python, bạn viết đoạn mã sau

import os

os.path.abspath("src/examplefile.txt")

Để giải thích mã Python. trước tiên, bạn phải nhập mô-đun

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
8 bằng Python để có thể chạy các chức năng của hệ điều hành trong mã của mình

Sau đó, bạn sử dụng thư viện

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
1 để trả về phiên bản chuẩn hóa tuyệt đối của đường dẫn tên đường dẫn

Điều này sẽ dẫn đến đầu ra sau

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt

Phần kết luận

Như bạn có thể thấy, đường dẫn tuyệt đối giúp bạn tìm đường dẫn đầy đủ của tệp hoặc thư mục so với thư mục làm việc hiện tại. Điều này rất hữu ích vì bạn có thể linh hoạt tìm tệp hoặc thư mục và trả về đường dẫn chính xác trên các hệ điều hành khác nhau

Để có đường dẫn tuyệt đối trong Python, bạn sử dụng thư viện

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
2. Chèn tên tệp của bạn và nó sẽ trả về đường dẫn đầy đủ tương đối từ thư mục làm việc bao gồm tệp

Khi một gói được tải từ một tệp trong Python, __file__ được đặt vào thư mục của nó. Sau đó, bạn có thể sử dụng phương pháp đó với các phương pháp khác để tìm thư mục chứa tệp

Lấy ví dụ của bạn một lần

A = os. con đường. tham gia (os. con đường. dirname(__file__), '. ')

# A là thư mục mẹ của thư mục chứa chương trình

B = os. con đường. dirname(os. con đường. đường dẫn thực (__file__))

# B là thư mục chuẩn hóa (?) nơi chứa chương trình

C = os. con đường. lối bỏ qua (os. con đường. dirname(__file__))

# C là đường dẫn tuyệt đối của thư mục chứa chương trình

Bạn có thể thấy nhiều giá trị được trả về từ những giá trị này tại đây

nhập hệ điều hành

in lại file này__)

in (os. con đường. tham gia (os. con đường. dirname(__file__), '. '))

in (os. con đường. dirname(os. con đường. đường dẫn thực (__file__)))

in (os. con đường. lối bỏ qua (os. con đường. dirname(__file__)))

Trong Python, bạn có thể lấy đường dẫn (vị trí) của tệp hiện tại, tôi. e. , tập lệnh hiện đang chạy (______49) với

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0.
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 hữu ích để đọc các tệp khác dựa trên vị trí của tệp hiện tại

Trong Trăn 3. 8 trở về trước,

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 trả về đường dẫn đã chỉ định khi thực hiện lệnh
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
3 (hoặc
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
4). Nếu bạn chỉ định một đường dẫn tương đối, một đường dẫn tương đối sẽ được trả về. Nếu bạn chỉ định một đường dẫn tuyệt đối, một đường dẫn tuyệt đối sẽ được trả về

Trong Trăn 3. 9 trở lên,

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 luôn trả về một đường dẫn tuyệt đối, bất kể đường dẫn được chỉ định bằng lệnh
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
3 là tương đối hay tuyệt đối

Bài viết này mô tả các nội dung sau

  • python3 data/src/file_path.py
    # getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
    # __file__:     data/src/file_path.py
    
    7 và
    python3 data/src/file_path.py
    # getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
    # __file__:     data/src/file_path.py
    
    0
  • Lấy tên tệp và thư mục của tệp tập lệnh hiện tại
  • Nhận đường dẫn tuyệt đối của tệp tập lệnh hiện tại
  • Đọc các tệp khác dựa trên vị trí của tệp tập lệnh hiện tại
  • Thay đổi thư mục hiện tại thành thư mục của tệp script hiện tại
  • Đọc cùng một tệp bất kể thư mục làm việc hiện tại

Xem bài viết sau về cách lấy và thay đổi thư mục làm việc hiện tại

  • Nhận và thay đổi thư mục làm việc hiện tại trong Python

Lưu ý rằng không thể sử dụng

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 trong Jupyter Notebook (
/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
50). Bất kể thư mục nơi Jupyter Notebook được bắt đầu, thư mục hiện tại là nơi chứa
/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
50. Có thể thay đổi thư mục hiện tại bằng cách sử dụng
/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
52 trong mã

Liên kết được tài trợ

python3 data/src/file_path.py # getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook # __file__: data/src/file_path.py 7 và python3 data/src/file_path.py # getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook # __file__: data/src/file_path.py 0

Giả sử bạn làm việc trong thư mục sau. Trên Windows, bạn có thể kiểm tra thư mục hiện tại bằng lệnh

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
55 thay vì
/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
56

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
2

nguồn.

Tạo tệp tập lệnh Python (

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
57) với mã sau trong thư mục bên dưới (
/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
58)

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)

nguồn.

Chạy nó bằng lệnh

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
3 (hoặc
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
4)

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py

nguồn.

Bạn có thể lấy đường dẫn tuyệt đối của thư mục làm việc hiện tại với

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
7 và đường dẫn được chỉ định bằng lệnh
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
4 với
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0

Trong Trăn 3. 8 trở về trước, đường dẫn được chỉ định bởi lệnh

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
3 (hoặc
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
4) được lưu trữ trong
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0. Trong ví dụ trên, một đường dẫn tương đối được chỉ định, do đó, một đường dẫn tương đối được trả về, nhưng nếu một đường dẫn tuyệt đối được chỉ định, một đường dẫn tuyệt đối sẽ được trả về

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
5

nguồn.

Trong Trăn 3. 9 trở lên,

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 luôn lưu trữ một đường dẫn tuyệt đối, bất kể đường dẫn được chỉ định bằng lệnh
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
3 là tương đối hay tuyệt đối

Trong các ví dụ sau, hãy thêm mã vào cùng một tệp tập lệnh (

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
57) và thực thi từ cùng thư mục với ví dụ trên trong Python3. 7

Lưu ý rằng nếu

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 là một đường dẫn tuyệt đối (khi Python 3. 9 trở lên hoặc khi chỉ định đường dẫn tuyệt đối trong Python 3. 8 trở xuống), bạn có thể sử dụng cùng mã như được mô tả bên dưới để đọc các tệp khác dựa trên vị trí của tệp tập lệnh hiện tại. Kết quả thực thi bằng cách chỉ định đường dẫn tuyệt đối trong Python3. 7 được hiển thị ở cuối

Lấy tên tệp và thư mục của tệp tập lệnh hiện tại

Sử dụng

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
01 và
import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
02 để lấy tên tệp và thư mục của tệp tập lệnh hiện tại

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
2

nguồn.

Kết quả là như sau

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
0

nguồn.

Nếu bạn chỉ muốn lấy tên thư mục ngay phía trên tệp, hãy sử dụng

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
03

Xem bài viết sau để biết chi tiết về

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
01,
import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
02, v.v.

  • Lấy tên tệp, thư mục, phần mở rộng từ một chuỗi đường dẫn trong Python

Nhận đường dẫn tuyệt đối của tệp tập lệnh hiện tại

Nếu bạn nhận được đường dẫn tương đối với

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0, bạn có thể chuyển đổi nó thành đường dẫn tuyệt đối với
import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
07

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
9

nguồn.

Kết quả là như sau

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0

nguồn.

Nếu bạn chỉ định một đường dẫn tuyệt đối trong

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
07, nó sẽ được trả về nguyên trạng, vì vậy nếu
python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 là một đường dẫn tuyệt đối, sẽ không có lỗi nào xuất hiện ngay cả khi bạn đặt
import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
90

Liên kết được tài trợ

Đọc các tệp khác dựa trên vị trí của tệp tập lệnh hiện tại

Nếu bạn muốn đọc các tệp khác dựa trên vị trí (đường dẫn) của tệp tập lệnh hiện tại, hãy nối đường dẫn thư mục của tệp hiện tại và đường dẫn tương đối (từ tệp hiện tại) của tệp bạn muốn đọc với

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
91

Lưu ý rằng các tệp trong cùng thư mục với tệp script có thể được đọc bằng cách chỉ định tên tệp

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
5

nguồn.

Kết quả là như sau

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
6

nguồn.

Thư mục trên được đại diện bởi

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
92. Không có vấn đề gì, nhưng nếu bạn sử dụng ________ 493, bạn có thể chuẩn hóa đường dẫn và xóa thêm ________ 492, v.v.

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
0

nguồn.

Kết quả là như sau

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
1

nguồn.

Thay đổi thư mục hiện tại thành thư mục của tệp script hiện tại

Sử dụng

/Users/dannysteenman/home/projects/example-project/src/examplefile.txt
52 để thay đổi thư mục làm việc hiện tại thành thư mục của tệp tập lệnh hiện tại

  • Nhận và thay đổi thư mục làm việc hiện tại trong Python

Bạn có thể xác nhận rằng nó đã được thay đổi bằng

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
7

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
2

nguồn.

Kết quả là như sau

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
3

nguồn.

Nếu thư mục làm việc hiện tại giống với thư mục của tệp hiện tại, bạn có thể chỉ định đường dẫn tương đối từ tệp hiện tại để đọc các tệp khác

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
4

nguồn.

Kết quả là như sau

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
5

nguồn.

Đọc cùng một tệp bất kể thư mục làm việc hiện tại

Bằng cách sử dụng

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
0 để lấy đường dẫn của tệp tập lệnh hiện tại, bạn có thể đọc cùng một tệp bất kể thư mục làm việc hiện tại là gì

Như được hiển thị cho đến nay, có hai cách

  • Tham gia thư mục
    python3 data/src/file_path.py
    # getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
    # __file__:     data/src/file_path.py
    
    0 và đường dẫn tương đối (từ
    python3 data/src/file_path.py
    # getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
    # __file__:     data/src/file_path.py
    
    0) của tệp bạn muốn đọc với
    import os
    
    print('getcwd:      ', os.getcwd())
    print('__file__:    ', __file__)
    
    91
  • Thay đổi thư mục làm việc hiện tại thành thư mục
    python3 data/src/file_path.py
    # getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
    # __file__:     data/src/file_path.py
    
    0

Việc thay đổi thư mục hiện tại sẽ dễ dàng hơn, nhưng tất nhiên, nếu bạn đọc hoặc ghi tệp sau đó, bạn cần xem xét rằng thư mục hiện tại đã bị thay đổi

Kết quả của các ví dụ cho đến nay là như sau

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
6

nguồn.

Kết quả cho việc chỉ định đường dẫn tuyệt đối bằng lệnh

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py
4 như sau. Bạn có thể đọc cùng một tập tin

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)
7

nguồn.

Thay đổi thư mục hiện tại trong thiết bị đầu cuối và thực thi cùng một tệp tập lệnh. Bạn có thể thấy rằng cùng một tệp được đọc từ các vị trí khác nhau

Đường dẫn (__ tệp __) trong Python là gì?

Trong Python a. tệp py là một mô-đun. Vì vậy, nhập amodule sẽ có thuộc tính __file__ có nghĩa là những thứ khác nhau trong các trường hợp khác nhau. Lấy từ các tài liệu. __file__ là tên đường dẫn của tệp mà mô-đun được tải từ đó, nếu nó được tải từ một tệp .

Làm cách nào để sử dụng abspath trong Python?

Đường dẫn tuyệt đối còn được gọi là đường dẫn đầy đủ và bắt đầu bằng / trong Linux và macOS và C. / trên Windows. Để tìm đường dẫn tuyệt đối trong Python, bạn nhập mô-đun os, sau đó bạn có thể tìm thư mục làm việc hiện tại bằng cách sử dụng os. đường dẫn. abspath("insert-file-name-here") trong tập lệnh Python của bạn.

Việc sử dụng đường dẫn os dirname (__ tệp __) là gì?

đường dẫn. phương thức dirname() trong Python được sử dụng để lấy tên thư mục từ đường dẫn đã chỉ định .

Đường dẫn os dirname (__ tệp __) trả về là gì?

đường dẫn. dirname(__file__) trả về trống . Lưu câu hỏi này.