Nhận hình ảnh đường dẫn python

Trong ví dụ sau, đường dẫn tệp trỏ đến một tệp trong thư mục hình ảnh nằm ở thư mục gốc của trang web hiện tại

Trong ví dụ sau, đường dẫn tệp trỏ đến một tệp trong thư mục hình ảnh nằm trong thư mục hiện tại

Trong ví dụ sau, đường dẫn tệp trỏ đến một tệp trong thư mục hình ảnh nằm trong thư mục tăng một cấp so với thư mục hiện tại


Thực hành tốt nhất

Cách tốt nhất là sử dụng đường dẫn tệp tương đối (nếu có thể)

Khi sử dụng đường dẫn tệp tương đối, các trang web của bạn sẽ không bị ràng buộc với URL cơ sở hiện tại của bạn. Tất cả các liên kết sẽ hoạt động trên máy tính của riêng bạn (máy chủ cục bộ) cũng như trên miền công cộng hiện tại và miền công cộng trong tương lai của bạn

Mục tiêu của bài viết này là tính toán đường dẫn đến một tệp trong một thư mục trong dự án của bạn. Lý do chúng tôi tính toán đường dẫn này là bạn tham khảo đúng vị trí cho dù mã được cài đặt ở đâu. Đây là trường hợp khi bạn chia sẻ mã của mình với đồng nghiệp hoặc triển khai mã của bạn trên máy chủ web e. g

Bạn không thể mã hóa cứng vị trí (dự kiến) của tệp vì

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
1 không tồn tại trên máy của bạn hoặc trên máy chủ mà chúng tôi đang triển khai. Lý tưởng nhất là chúng tôi muốn chỉ định đường dẫn liên quan đến thư mục gốc của dự án của chúng tôi

Trong bài viết này, chúng ta sẽ kiểm tra một thủ thuật Python đơn giản cho phép chúng ta tham khảo các tệp liên quan đến thư mục dự án của chúng ta một cách rất dễ dàng. Hãy viết mã

TL/DR;

Trường hợp sử dụng

Hai ví dụ nhanh về nơi thủ thuật này có ích

  • Đang tải tệp môi trường từ e. g.
    import json
    f = open(r’C:\projects\relative_path\data\mydata.json’)
    data = json.load(f)
    2
  • Chúng tôi có một API nhận tệp;
Sự chuẩn bị

Trong bài viết này, chúng tôi sẽ thiết lập cấu trúc dự án của chúng tôi như thế này

relative_path 
- data
-- mydata.json
- processes
-- load_data.py

Tất cả mã của chúng tôi được chứa trong một thư mục có tên là

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
4. Đây là gốc của các dự án của chúng tôi, có nghĩa là nó chứa tất cả mã của chúng tôi. Như bạn có thể thấy, chúng tôi có hai thư mục. thư mục dữ liệu chứa tệp json mục tiêu của chúng tôi và thư mục quy trình của chúng tôi chứa
import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
5;

Đang tải dữ liệu

Trong phần này, chúng ta sẽ bắt đầu với cách tải mydata rõ ràng nhất. json và xem những sai sót của nó. Sau đó, chúng tôi sẽ từ từ cải thiện, kết thúc bằng một phương thức tải tương đối. Sau đó, chúng tôi sẽ tổng hợp kiến ​​thức này thành một thủ thuật đơn giản sẽ giúp ích cho chúng tôi trong tất cả các dự án trong tương lai

1. đường dẫn tuyệt đối

Phương pháp đơn giản nhất là chỉ sử dụng một đường dẫn tuyệt đối trong mã của chúng tôi

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)

Mặc dù điều này hoạt động hoàn hảo trên máy tính xách tay của tôi, nhưng nếu chúng tôi triển khai mã này trên máy chủ, điều này có thể không thành công nếu chúng tôi đặt mã vào một thư mục khác. Linux thậm chí không có ổ C nên chắc chắn không có

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
0 trên máy chủ đó

2. Sử dụng __file__

Chúng tôi có thể tính toán đường dẫn tuyệt đối đến tệp chúng tôi đang chạy trong thời gian chạy

print(__file__)# Results in
# C:\projects\relative_path\processes\load_data.py

Mã ở trên sẽ in ra vị trí của tệp chúng tôi hiện đang thực thi
Trong trường hợp của chúng tôi, đây là

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
1. Chúng ta có thể làm việc từ đó.

3. Tính dirname của __file__

Lấy đường dẫn thư mục của tệp chúng tôi đang thực hiện nhích chúng tôi gần hơn một chút

import os
print(os.path.dirname(__file__))
# Results in
# C:\projects\relative_path\processes

4. Điều hướng thư mục

Chúng tôi phải đi lên một thư mục để đi đến đường dẫn gốc của mình, sau đó đi đến thư mục

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
2 để lấy vị trí của dữ liệu json của chúng tôi

Ở đây chúng tôi lấy đường dẫn thư mục của mình và sử dụng os. đường dẫn. tham gia để điều hướng

  1. Trước tiên, chúng tôi sẽ đi lên một thư mục bằng cách sử dụng '. ' (điều này giống như trong một thiết bị đầu cuối). Điều này sẽ điều hướng chúng ta đến thư mục mẹ, trong trường hợp này là thư mục gốc
  2. Sau đó, chúng tôi tham gia 'dữ liệu' để điều hướng đến thư mục dữ liệu
  3. Cuối cùng, chúng tôi tham gia tên tệp

Ngoài ra, chúng tôi gọi os. đường dẫn. realpath để 'tính toán' các lệnh

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
3 để nó dẫn đến đường dẫn tuyệt đối của chúng ta

Rắc rối điều hướng

Tốt đẹp. Chúng tôi đã tính toán đường dẫn chính xác trong thời gian chạy. Tuy nhiên, vấn đề là chúng ta phải điều hướng khá nhiều. Hãy tưởng tượng chúng tôi đang làm việc trong một tệp tại vị trí này.

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
4. Nếu chúng tôi muốn tải `mydata. json` từ tệp này, chúng ta phải chạy

Từ tệp chúng tôi phải di chuyển lên ba lần. Điều này có một chút phức tạp. Chúng tôi cũng không thể di chuyển tệp vì nó tính toán đường dẫn đến dữ liệu của chúng tôi có liên quan đến tệp chúng tôi đang thực thi. Hãy làm sạch nó một chút trong phần tiếp theo

Một con đường rất rõ ràng và thẳng về phía trước (hình ảnh của Pop & Zebra trên Bapt)The Trick

Mẹo nhỏ là xác định một biến tính toán đường dẫn tuyệt đối đến thư mục gốc của chúng ta trong một tệp và sau đó nhập biến này từ bất kỳ đâu trong dự án. Nó hoạt động như thế này

Trong thư mục gốc của dự án, hãy tạo một thư mục có tên là

import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
5 chứa một tệp có tên là
import json
f = open(r’C:\projects\relative_path\data\mydata.json’)
data = json.load(f)
6. Chúng tôi sẽ đặt đoạn mã sau vào bên trong

Đoạn mã ngắn này sẽ luôn tính toán đường dẫn chính xác đến thư mục gốc của dự án của chúng ta. Chúng tôi biết vị trí của tệp trong dự án và chỉ cần đi lên một. Sau đó, trong các tệp khác, chúng ta có thể nhập biến ROOT_DIR

Thay vì mã dài, phức tạp từ phần trước, chúng ta có thể làm như sau

Cách tiếp cận này không chỉ dễ đọc hơn mà còn không ràng buộc vị trí tệp xử lý của chúng tôi với vị trí tệp dữ liệu của chúng tôi. chúng tôi tính toán vị trí của tệp dữ liệu của chúng tôi so với thư mục gốc của dự án. Bạn có thể thêm thư mục cấu hình với định nghĩa. py vào bất kỳ dự án nào để bạn có một giải pháp tổng quát, rất hay để xử lý các đường dẫn tương đối

Một con đường đẹp như vậy (hình ảnh của Lili Popper trên Bapt)Kết luận

Sử dụng một tệp duy nhất chứa một biến duy nhất, chúng tôi đơn giản hóa việc tính toán một loạt các đường dẫn. Ngoài ra, thủ thuật này rất đơn giản và có thể dễ dàng sao chép vào mọi dự án. Sử dụng tệp định nghĩa, chúng ta có thể dễ dàng tải các biến môi trường vào chương trình python của mình. Thêm về những điều này trong bài viết này

Nếu bạn có góp ý/làm rõ xin vui lòng bình luận để tôi có thể cải thiện bài viết này. Trong thời gian chờ đợi, hãy xem các bài viết khác của tôi về tất cả các loại chủ đề liên quan đến lập trình như thế này