أكثر

استخدام أحرف البدل للمجلد لنسخ الملفات باستخدام Python

استخدام أحرف البدل للمجلد لنسخ الملفات باستخدام Python


أود نسخ ملف بيانات من ملف شكل محدد من مجلد معين ("الشبكة") إلى عدد من المجلدات التي تحتوي على اسم "البلد". سوف ملفات الأشكال البلد احتفظوا باسمهم الأصلي. لأن هناك العديد دولة المجلدات ، اعتقدت أن استخدام حرف بدل سيكون مفيدًا جدًا. يحاول الرسم البياني التالي توضيح ما أقوم به:

يوجد أدناه الرمز الذي أمتلكه في الوقت الحالي حيث استخدمت هذا المنشور كدليل:

import os، sys، glob، shutil root_dir = "C:  Users  xxxx  Desktop  Test " country_dir = "Country * " #do_some_function for path، dirname in os.walk (root_dir): if country_dir in path : لـ subdirname في dirname: if subdirname.startswith ('Country'): لـ fname في glob.glob ('*. shp'): shutil.copyfile (do_some_function، fname)

ومع ذلك ، أتلقى الخطأ التالي:

ValueError: قيم كثيرة جدًا لفك حزمها

أي نصيحة بشأن ما أفعله خطأ؟


تعديل:

باتباع اقتراح @ NathanW ، قمت بتغيير النص إلى ما يلي:

استيراد نظام التشغيل ، sys ، إغلاق root_dir = "C:  Users  xxxx  Desktop  Test " country_dir = "Country * " #do_some_function for path، dirs، files in os.walk (root_dir + folder_dir): للملف في الملفات: if file.endswith ('*. shp'): shutil.copy (do_some_function، file)

لسوء الحظ ، لم يحدث شيء.


جرب هذا:

استيراد نظام التشغيل ، الكرة الأرضية ، إغلاق root_dir = "C:  Users  xxxx  Desktop  Test " country_dir = "Country_" grid_path = "C:  Users  xxxx  Desktop  Test  Grid  Grid.shp" # Get all الملفات التي تشكل Grid Shapefile gridShpFiles = glob.glob (grid_path [: - 3] + "*") للمسار ، dirname ، الملفات في os.walk (root_dir): if country_dir in path: for f in gridShpFiles: shutil.copy (و ، المسار)

خذ وقتك في تعيين المسارات (الأسطر 2 و 3 و 4) ، لقد اختبرت النص على جنو / لينكس ، لكن مسارات Windows دائمًا ما تكون أكثر تعقيدًا.

كما تلاحظ ، يمكنك تجنب حرف البدل ؛ التعبيرإذا كان country_dir في المسار:يقوم بالعمل.

أخيرًا ، كما ذكر @ atrwork21 ، يجب أن تأخذ جميع ملفات Shapefile في الاعتبار. هذا ما تفعله الكتلة الثانية.


os.walkتُرجع مجموعة من ثلاث قيم:

للمسار ، dirs ، الملفات في os.walk ()

ضع في اعتبارك أيضًا https://stackoverflow.com/questions/2186525/use-a-glob-to-find-files-recursively-in-python


شاهد الفيديو: تعلم البرمجة بلغة بايثون - Classes and Objects شرح الكلاس والاوبجكت - 21