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

السؤال

نشر

from pathlib import Path

from datetime import datetime

file_name = Path.home() / Path('Desktop', 'Folder')

 

file_name.mkdir(exist_ok=True)

 

for name in range(20):

    times = datetime.now().strftime("%Y%m%d%H%M%S%f")

 

    (file_name / f'File{times}_{name}.json').touch(exist_ok=True)

    (file_name / f'Folder{times}_{name}').mkdir(exist_ok=True)

 

 

   

 

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته،

الكود صحيح وسينفذ المطلوب منه بحيث يقوم بإنشاء مجلد باسم "Folder" على سطح المكتب ثم ينشئ داخله 20 ملف JSON و20 مجلد فرعي، أرجو منك في حال كان هذا السؤال متعلقا بإحدى الدروس في أحد الدورات التي قمت بالاشتراك فيها أن تقوم بطرح سؤالك في المرة القادمة في أسفل الدرس وهذا لمساعدتك بالشكل المناسب فهنا نقوم بالإجابة فقط على الأسئلة الغير متعلقة بمحتوى الدورة.

  • 0
نشر

لا مشكلة بالكود، وللعلم بالشيء مكتبة pathlib تعتبر حديثة وقديمًا كنا نستخدم os.path لكن حاليًا pathlib هي أحدث وأسهل في التعامل مع المسارات وتعمل على جميع الأنظمة Windows/Mac/Linux.

كتحسين، المتغير file_name بمجلد وليس ملف لذا الاسم غير صحيح، حيث يجب استخدام أسماء تعبر عن المحتوى، مثل base_dir أو target_folder أو folder_path لتسهيل قراءة الكود واستيعاب المنطق.

وبدلاً من كتابة Path.home() / Path('Desktop', 'Folder') الأفضل دمج النصوص مباشرة دون تحويل الجزء الثاني إلى Path:

folder_path = Path.home() / 'Desktop' / 'Folder'

كذلك إضافة parents=True، لتصبح mkdir(parents=True, exist_ok=True) وذلك على إفتراض أن مجلد Desktop غير موجود وهو أمر غير وارد بالطبع لكن على إفتراض المجلد هو مجلد آخر، أو أنك أردت إنشاء Folder/test مباشرًة، فمعلمة parents=True ستقوم بإنشاء كل المجلدات المفقودة في المسار وتجنب توقف الكود.

  • 0
نشر

رغم أن الكود يعمل بشكل مثالي، إلا أن هناك بعض التعديلات البسيطة التي تجعله أكثر احترافية وقابلية للقراءة مثل

تسمية المتغيرات بما تدل عليه أي  المتغير file_name يستخدم هنا لتمثيل مسار مجلد لذا من الأفضل تسميته folder_path أو dir_name وعند استخدام pathlib، ليس من الضروري استخدام Path مرة أخرى داخل عملية الدمج. يمكنك دمج السلاسل النصية (Strings) مباشرة باستخدام علامة /.

وأيضاً بالرغم أن الكود  مثال  بسيط ولكن يتم استدعاء datetime.now() في كل دورة داخل الحلقة (Loop). إذا كنت تنشئ ألاف الملفات، فهذا سيستهلك موارد المعالج.فيمكنك أخذ الطابع الزمني مرة واحدة قبل الحلقة، والاعتماد على المتغير name لتمييز الملفات عن بعضها.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...