Rumah > Artikel > pembangunan bahagian belakang > Mengapa Laluan Relatif dalam Projek Python Membawa kepada Ralat Tidak Ditemui Fail?
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!