Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Laluan Relatif dalam Projek Python Membawa kepada Ralat Tidak Ditemui Fail?

Mengapa Laluan Relatif dalam Projek Python Membawa kepada Ralat Tidak Ditemui Fail?

Barbara Streisand
Barbara Streisandasal
2024-11-01 11:39:02508semak imbas

Why Do Relative Paths in Python Projects Lead to File Not Found Errors?

Mengakses Fail dengan Laluan Relatif dalam Projek Python

Apabila memanipulasi fail dalam projek Python, laluan relatif sering digunakan untuk kemudahan. Walau bagaimanapun, tingkah laku mereka boleh menjadi samar-samar, terutamanya apabila berurusan dengan struktur projek berbilang peringkat.

Pertimbangkan reka letak projek berikut:

project
    /data
        test.csv
    /package
        __init__.py
        module.py
    main.py

Module module.py cuba membaca fail dalam . ./data/test.csv menggunakan laluan relatif, tetapi apabila menjalankan main.py, ralat timbul menunjukkan fail tidak ditemui. Ketidakkonsistenan yang jelas ini berpunca daripada fakta bahawa laluan relatif diselesaikan secara berbeza bergantung pada tempat skrip dilaksanakan.

Dalam kes __init__.py dan module.py, laluan dinilai berbanding dengan direktori yang mengandungi ini fail. Walau bagaimanapun, untuk main.py, laluan adalah relatif kepada lokasinya sendiri.

Menyelesaikan Kekaburan Laluan

Untuk menyelesaikan kekaburan ini, laluan mutlak boleh digunakan. Sebagai alternatif, pendekatan yang lebih elegan ialah menggunakan atribut __file__ Python:

<code class="python">from pathlib import Path

path = Path(__file__).parent / "../data/test.csv"

with path.open() as f:
    test = list(csv.reader(f))</code>

Helah ini bergantung pada modul pathlib 3.4 Python dan membina laluan mutlak berdasarkan lokasi skrip semasa.

Menyokong Versi Python Lama

Jika versi Python di bawah 3.4 masih digunakan, kaedah alternatif melibatkan memanipulasi laluan semasa:

<code class="python">import csv
import os.path

my_path = os.path.abspath(os.path.dirname(__file__))
path = os.path.join(my_path, "../data/test.csv")

with open(path) as f:
    test = list(csv.reader(f))</code>

Pendekatan ini menggabungkan fungsi os.path kepada mencapai hasil yang sama seperti kaedah berasaskan pathlib.

Atas ialah kandungan terperinci Mengapa Laluan Relatif dalam Projek Python Membawa kepada Ralat Tidak Ditemui Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn