"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا تؤدي المسارات النسبية في مشاريع بايثون إلى أخطاء لم يتم العثور على الملف؟

لماذا تؤدي المسارات النسبية في مشاريع بايثون إلى أخطاء لم يتم العثور على الملف؟

تم النشر بتاريخ 2024-11-07
تصفح:787

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

الوصول إلى الملفات ذات المسارات النسبية في مشاريع بايثون

عند معالجة الملفات داخل مشروع بايثون، غالبًا ما يتم استخدام المسارات النسبية من أجل الراحة. ومع ذلك، يمكن أن يصبح سلوكهم غامضًا، خاصة عند التعامل مع هياكل المشروع متعددة المستويات.

خذ بعين الاعتبار تخطيط المشروع التالي:

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