الوصول إلى الملفات ذات المسارات النسبية في مشاريع بايثون
عند معالجة الملفات داخل مشروع بايثون، غالبًا ما يتم استخدام المسارات النسبية من أجل الراحة. ومع ذلك، يمكن أن يصبح سلوكهم غامضًا، خاصة عند التعامل مع هياكل المشروع متعددة المستويات.
خذ بعين الاعتبار تخطيط المشروع التالي:
project /data test.csv /package __init__.py module.py main.py
Module Module.py قراءة ملف في ../data/test.csv باستخدام مسار نسبي، ولكن عند تشغيل main.py، يظهر خطأ يشير إلى عدم العثور على الملف. ينبع هذا التناقض الواضح من حقيقة أن المسار النسبي يتم حله بشكل مختلف اعتمادًا على مكان تنفيذ البرنامج النصي.
في حالة __init__.py وmodule.py، يتم تقييم المسار بالنسبة إلى الدليل الذي يحتوي على هذه العناصر. ملفات. ومع ذلك، بالنسبة إلى main.py، فإن المسار مرتبط بموقعه الخاص.
حل غموض المسار
لحل هذا الغموض، يمكن استخدام المسارات المطلقة. وبدلاً من ذلك، هناك طريقة أكثر أناقة تتمثل في استخدام خاصية __file__ الخاصة بـ Python:
from pathlib import Path
path = Path(__file__).parent / "../data/test.csv"
with path.open() as f:
test = list(csv.reader(f))
تعتمد هذه الخدعة على وحدة Pathlib 3.4 الخاصة بـ Python وتقوم بإنشاء مسار مطلق استنادًا إلى موقع البرنامج النصي الحالي.
دعم إصدارات Python الأقدم
إذا كانت إصدارات بايثون أقل من 3.4 لا تزال قيد الاستخدام، فهناك طريقة بديلة تتضمن معالجة المسار الحالي:
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))
يجمع هذا الأسلوب بين وظائف os.path لتحقيق نفس النتيجة مثل الطريقة المستندة إلى pathlib.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3