كيفية التحقق من توافق مجموعة الملفات مع نظام التسمية

StackOverflow https://stackoverflow.com/questions/19030

  •  09-06-2019
  •  | 
  •  

سؤال

لدي مجموعة من الملفات (حلقات تلفزيونية، على الرغم من أنها عشوائية إلى حد ما) التي أريد التحقق من تطابقها مع نظام تسمية/تنظيم محدد..

حالياً:لدي ثلاث صفائف من التعبيرات العادية، واحدة لأسماء الملفات الصالحة، وواحدة للملفات التي تفتقد اسم حلقة، وواحدة للمسارات الصالحة.

بعد ذلك، أقوم بتكرار كل تعبير عادي لاسم ملف صالح، إذا كان مطابقًا، ألحقه بإملاء "صالح"، وإذا لم يكن الأمر كذلك، فافعل الشيء نفسه مع التعبيرات العادية لاسم ep المفقود، إذا كان يطابق هذا، فألحقه بـ "غير صالح" " إملاء برمز خطأ (2: "اسم الحلقة مفقود")، إذا لم يطابق أيًا منهما، فسيتم إضافته إلى غير صالح مع رمز الخطأ "اسم غير صحيح".

يمكن العثور على الرمز الحالي هنا

أريد إضافة قاعدة تتحقق من وجود ملف Folder.jpg في كل دليل، ولكن إضافة هذا من شأنه أن يجعل الكود أكثر فوضى في حالته الحالية..

كيف يمكنني كتابة هذا النظام بطريقة أكثر قابلية للتوسيع؟

القواعد التي يجب التحقق منها ستكون ..

  • الملف موجود بالصيغة Show Name - [01x23] - Episode Name.avi أو Show Name - [01xSpecial02] - Special Name.avi أو Show Name - [01xExtra01] - Extra Name.avi
  • إذا كان اسم الملف بالتنسيق Show Name - [01x23].avi اعرض عليه قسم "اسم الحلقة المفقودة" من الإخراج
  • يجب أن يكون المسار بالتنسيق Show Name/season 2/the_file.avi (حيث يجب أن يكون الموسم الثاني هو رقم الموسم الصحيح في اسم الملف)
  • كل Show Name/season 1/ يجب أن يحتوي المجلد على "folder.jpg"

.أيه أفكار؟بينما أحاول التحقق من الحلقات التلفزيونية، يجب أن يكون هذا المفهوم/الرمز قابلاً للتطبيق على أشياء كثيرة..

الفكرة الوحيدة التي كانت لدي هي قائمة الإملاء بالتنسيق:

checker = [
{
    'name':'valid files',
    'type':'file',
    'function':check_valid(), # runs check_valid() on all files
    'status':0 # if it returns True, this is the status the file gets
}
هل كانت مفيدة؟

المحلول

أرغب في إضافة قاعدة تتحقق من وجود ملف folder.jpg في كل دليل ، ولكن لإضافة هذا من شأنه أن يجعل الكود أكثر فوضى في حالته الحالية ..

هذا لا يبدو سيئا.في الواقع، الكود الحالي الخاص بك يقوم بذلك بشكل جيد جدًا، وقد ذكر سفين طريقة جيدة للقيام بذلك أيضًا:

  1. الحصول على قائمة بجميع الملفات
  2. التحقق من وجود الملفات "المطلوبة".

كان عليك فقط إضافة قائمة بالملفات المطلوبة إلى قاموسك:

checker = {
  ...
  'required': ['file', 'list', 'for_required']
}

بقدر ما تكون هناك طريقة أفضل/قابلة للتوسيع للقيام بذلك؟لست متأكدا تماما.لم أستطع إلا أن أفكر حقًا في طريقة لإسقاط التعبيرات العادية "المتعددة" والبناء على فكرة سفين لاستخدام المحدد.لذا فإن استراتيجيتي هي تحديد القاموس على النحو التالي (وأنا آسف لأنني لا أعرف بناء جملة بايثون وأنا كسول جدًا للبحث عنه ولكن يجب أن يكون منطقيًا./regex/ هو اختصار لـ regex):

check_dict = {
  'delim'    : /\-/,
  'parts'    : [ 'Show Name', 'Episode Name', 'Episode Number' ],
  'patterns' : [/valid name/, /valid episode name/, /valid number/ ],
  'required' : ['list', 'of', 'files'],
  'ignored'  : ['.*', 'hidden.txt'],
  'start_dir': '/path/to/dir/to/test/'
}
  1. قم بتقسيم اسم الملف بناءً على المحدد.
  2. تحقق من كل جزء من الأجزاء.

نظرًا لأنها قائمة مرتبة، يمكنك تحديد الأجزاء المفقودة وإذا كان القسم لا يتطابق مع أي نمط، فهو غير صحيح.هنا parts و patterns لديك نسبة 1 إلى 1.صفيفان بدلاً من القاموس يفرضان الأمر.

يمكن سرد الملفات المتجاهلة والمطلوبة.ال . و .. من المحتمل أن يتم تجاهل الملفات تلقائيًا.يجب السماح للمستخدم بإدخال "globs" التي يمكن توسيعها.أفكر هنا في svn:ignore الخصائص، ولكن اللمعان أمر طبيعي لإدراج الملفات.

هنا start_dir سيكون افتراضيًا للدليل الحالي ولكن إذا أردت أن يقوم ملف واحد بإجراء اختبار آلي لمجموعة من الدلائل، فسيكون هذا مفيدًا.

النهاية الحقيقية هنا هي قالب المسار وعلى نفس المنوال ما هو المسار المطلوب لـ "الملفات الصالحة".لم أتمكن حقًا من التوصل إلى فكرة قوية دون كتابة تعبير عادي كبير وأخذ مجموعات منه ...لبناء القالب.لقد شعرت كثيرًا بكتابة قواعد لغة TextMate.لكن هذا بدأ يبتعد عن سهولة الاستخدام.كانت المشكلة الحقيقية هي أن قالب المسار لم يتكون من parts, ، وهو أمر منطقي ولكنه يضيف التعقيد.

هل هذه الإستراتيجية متوافقة مع ما كنت تفكر فيه؟

نصائح أخرى

ربما يجب عليك اتباع نهج التخلف عن السداد من أجل:"اسم الملف صحيح" واعمل من هناك على دحض هذا البيان:

مع حقيقة أنك تسمح فقط بأسماء الملفات مع:"اسم العرض" و"رقم الموسم × رقم الحلقة" و"اسم الحلقة"، فأنت تعلم على وجه اليقين أنه يجب فصل هذه العناصر بعلامة "-" (شرطة) لذا يجب أن يكون لديك 2 منها حتى يكون اسم الملف صحيحًا .
إذا تم التحقق من ذلك، فيمكنك استخدام الكود الخاص بك للتحقق من أن اسم العرض يطابق اسم العرض كما هو موضح في المجلد الأصلي الخاص بالوالد (أفترض أنه حساس لحالة الأحرف)، ويطابق رقم الموسم القيمة الرقمية للمجلد الأصلي (مع أو بدون 0 إضافية مُسبق).

ومع ذلك، إذا لم تتمكن من رؤية المقدار الصحيح من الشرطات، فأنت تعرف على الفور أن هناك شيئًا خاطئًا وتتوقف قبل بقية الاختبارات وما إلى ذلك.

وبشكل منفصل يمكنك التحقق مما إذا كان الملف folder.jpg موجود واتخاذ الإجراءات اللازمة. أو قم بذلك أولاً وقم بتصفية هذا الملف من بقية الملفات الموجودة في هذا المجلد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top