اذهب إلى المحتوى
  • 0

بناء شجرة الملفات في بايثون

محمد العامر3

السؤال

Recommended Posts

  • 1

يوجد في مكتبة os  يوجد مكتبة تدعى walk تأخذ مسار المجلد المراد بناء شجرة الملفات له

وترجع 3 متغيرات يعبر الأول عن مسار المجلد الرئيسي والثاني عن قائمة المجدات الفرعية في هذا المجلد، وقائمة أسماء الملفات في هذا المجلد.

حيث تعمل هذه الدالة بشكل تكراري حتى تمشي على جميع الملفات والمجلدات.

تشبه في بنائ الشجرة الشكل التالي حيث تسبر مستوى مستوى تنتقل للمستوى الاعمق من خلال المجلدات وتكون الملفات والمجلدات الفارغة عبارة عن اوراق الشجرة 
image.png.820aee8325b7d860bfdc4d99aa0cff9a.png

مثال :

حيث نريد بناء شجرة الملفات لمجلد يدعى root موجود في المسار التالي "C:\\Users\\Ali\\Desktop\\root" حيث يوجد داخله ثلاث مجلدات 

image.png.cbb4a23e5cd8ea0344c73820e6eb7d4c.png

 وداخله في المسار التالي يوجد هذه الملفات

image.png.aef5a594e6dddd784864c3dbd2ae2046.png

 

حيث نطبق الكود التالي لبناء الشجرة كما تريد حيث walk ترجع 3 متغيرات files وdirectories ونقوم بالمرور على كل الملفات 

 

image.png.491340d85e6dc1b2d37fce8051e3e26a.png

 

والدالة walk من النوع generator اي تعيد نتيجة عند كل استدعاء لذلك يجب المرور عليها بحلقة for 

وهي تثبر مستوى ونتقل للمستوى الثاني حيث يعبر المستوى عن محتويات المجلد حيث تقوم بفتح المجلدات بالترتيب  

import os

path = "C:\\Users\\Ali\\Desktop\\root"

for root, directories, files in os.walk(path):
    for file in files:
        file_path = os.path.join(root, file)
        # Perform operations on the file_path
        print(file_path)

    for directory in directories:
        directory_path = os.path.join(root, directory)
        # Perform operations on the directory_path
        print(directory_path)

 

لتظهر النتيجة بالشكل التالي 
image.png.a1aa02f435ba36e92758dfa4347e9045.png

تم التعديل في بواسطة Ali Ibrahim12
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 3 دقائق مضت قال محمد العامر3:

كيف يمكن استثناء مجلد معين؟؟

في حال كان لدينا مجلدان مثل مجلد مثل  'venv', 'get' نقوم باستخدام الدالة remove التي تاخذ اسم المجلد بحيث نقوم بالمرور على اسماء المجلدات ونقوم باستثنائها في حال كانت تطابق اسم الموجود في قائمة اسماء المجلدات التي نريد حذفها وهي exclude_folders في الكود التالي :

import os

path = 'C:\\Users\\Ali\\Desktop\\root'
exclude_folders = ['venv', 'get']

for root, directories, files in os.walk(path):
    for folder in exclude_folders:
        if folder in directories:
            directories.remove(folder)
    
    for file in files:
        file_path = os.path.join(root, file)
        # Perform operations on file_path
        print(file_path)

    for directory in directories:
        directory_path = os.path.join(root, directory)
        # Perform operations on directory_path
        print(directory_path)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 7 دقائق مضت قال Ali Ibrahim12:

يوجد في مكتبة os  يوجد مكتبة تدعى walk تأخذ مسار المجلد المراد بناء شجرة الملفات له

وترجع 3 متغيرات يعبر الأول عن مسار المجلد الرئيسي والثاني عن قائمة المجدات الفرعية في هذا المجلد، وقائمة أسماء الملفات في هذا المجلد.

حيث تعمل هذه الدالة بشكل تكراري حتى تمشي على جميع الملفات والمجلدات.

تشبه في بنائ الشجرة الشكل التالي حيث تسبر مستوى مستوى تنتقل للمستوى الاعمق من خلال المجلدات وتكون الملفات والمجلدات الفارغة عبارة عن اوراق الشجرة 
image.png.820aee8325b7d860bfdc4d99aa0cff9a.png

مثال :

حيث نريد بناء شجرة الملفات لمجلد يدعى root موجود في المسار التالي "C:\\Users\\Ali\\Desktop\\root" حيث يوجد داخله ثلاث مجلدات 

image.png.cbb4a23e5cd8ea0344c73820e6eb7d4c.png

 وداخله في المسار التالي يوجد هذه الملفات

image.png.aef5a594e6dddd784864c3dbd2ae2046.png

 

حيث نطبق الكود التالي لبناء الشجرة كما تريد حيث walk ترجع 3 متغيرات files وdirectories ونقوم بالمرور على كل الملفات 

 

image.png.491340d85e6dc1b2d37fce8051e3e26a.png

 

والدالة walk من النوع generator اي تعيد نتيجة عند كل استدعاء لذلك يجب المرور عليها بحلقة for 

وهي تثبر مستوى ونتقل للمستوى الثاني حيث يعبر المستوى عن محتويات المجلد حيث تقوم بفتح المجلدات بالترتيب  

import os

path = "C:\\Users\\Ali\\Desktop\\root"

for root, directories, files in os.walk(path):
    for file in files:
        file_path = os.path.join(root, file)
        # Perform operations on the file_path
        print(file_path)

    for directory in directories:
        directory_path = os.path.join(root, directory)
        # Perform operations on the directory_path
        print(directory_path)

 

لتظهر النتيجة بالشكل التالي 
image.png.a1aa02f435ba36e92758dfa4347e9045.png

كيف يمكن استثناء مجلد معين؟؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 3 دقائق مضت قال Ali Ibrahim12:

في حال كان لدينا مجلدان مثل مجلد مثل  'venv', 'get' نقوم باستخدام الدالة remove التي تاخذ اسم المجلد بحيث نقوم بالمرور على اسماء المجلدات ونقوم باستثنائها في حال كانت تطابق اسم الموجود في قائمة اسماء المجلدات التي نريد حذفها وهي exclude_folders في الكود التالي :

import os

path = 'C:\\Users\\Ali\\Desktop\\root'
exclude_folders = ['venv', 'get']

for root, directories, files in os.walk(path):
    for folder in exclude_folders:
        if folder in directories:
            directories.remove(folder)
    
    for file in files:
        file_path = os.path.join(root, file)
        # Perform operations on file_path
        print(file_path)

    for directory in directories:
        directory_path = os.path.join(root, directory)
        # Perform operations on directory_path
        print(directory_path)

 

شكرا لحضرتك على الشرح 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...