נתיב אבסולוטי - os.path.abspath

תגיות:

נתונה לי היררכיית הקבצים הבאה:


התוכנית ex.py עושה שימוש בקובץ file.txt שנמצא בתיקיית resources.
כדי לא להיות תלוי לגמרי בנתיב הנוכחי של תיקיית resources, שכן הוא עשוי להשתנות בעתיד,
החלטתי להכניס לקובץ config.py את השורה:
RESOURCES_PATH = os.path.abspath(“resources”)
כך שבעת שאני מייבא את RESOURCES_PATH מ-app.config אני מצפה שנתיב יופיע כמשהו בסגנון:
…\example\app\resources
אבל זה לא מה שקורה. הנתיב שמתקבל הוא ביחס לתיקיית העבודה הנוכחית. זה אומר שאם לדוגמה אני מריץ את הטסטים מהנתיב …\example, אז RESOURCES_PATH יחושב כ-…\ example\resources - נתיב שאינו נכון(!) [אופן פעולת abspath הוא פשוט שרשור של הנתיב האבסולוטי של תיקיית העבודה הנוכחית ושל resources - בלי לוודא שהנתיב ולידי].
כך בעצם, אני לא מצליח להריץ טסטים שיש לי, מהסיבה הפשוטה, שהנתיב המחושב של הקובץ אינו נכון.
כיצד ניתן לפתור את הבעיה?

pathlib.Path(__file__).parent / 'resources'

הסבר:

  1. המשתנה המיוחד __file__ תמיד שומר את הנתיב לקובץ שבו המשתנה עצמו כתוב
  2. הפעולה pathlib.Path.parent מחזירה את ההורה של נתיב מסוים, במקרה הזה את התיקייה בה נמצא הקובץ.
  3. ב־pathlib יש טריק שאפשר לשרשר נתיבים באמצעות /, זה פועל כמו os.path.join