- إعادة التسمية بكميات كبيرة باستخدام وحدة نظام التشغيل ووحدة الكرة الأرضية.
- احصل على قائمة الملفات مع وحدة glob
- إعادة التسمية باستخدام os.rename ()
- إنشاء أرقام متسلسلة مملوءة بصفر باستخدام تنسيق str.format ()
- مثال على رمز لإضافة سلسلة / رقم متسلسل قبل الملف
- مثال على رمز لإضافة سلسلة / رقم متسلسل بعد الملف
إعادة التسمية بكميات كبيرة باستخدام وحدة نظام التشغيل ووحدة الكرة الأرضية.
استخدم وحدة os ووحدة glob لتغيير وإعادة تسمية أسماء الملفات في مجلد بشكل مجمّع عن طريق إضافة سلاسل أو أرقام متسلسلة قبل وبعد أسماء الملفات.
مثال على بنية الملف
خذ هيكل الملف التالي كمثال. في هذه الحالة ، يُفترض وجود ملفات فقط (لا توجد مجلدات) في المجلد.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
أشياء لتأخذها بالحسبان
نظرًا لأن العملية تتضمن إعادة تسمية الملف ، احفظ الملف الأصلي بشكل منفصل حتى يمكن حفظه في حالة الفشل.
احصل على قائمة الملفات مع وحدة glob
ستعثر وحدة glob على جميع أسماء المسار التي تطابق النمط المحدد وفقًا للقواعد المستخدمة في غلاف Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
على سبيل المثال ، يمكن استخدام الوظيفة التالية للحصول على قائمة بأسماء الملفات والدليل في الدليل الحالي.glob.glob('./*')
يمكن أن تكون الوسيطة مسارًا مطلقًا أو مسارًا نسبيًا.
في هذا المثال ، سيبدو كما يلي.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
بدلاً من a.jpg ، يمكنك الحصول على ما يلي ، مع إضافة مسار الوسيطة../testdir/a.jpg
يمكنك أيضًا استخدام أحرف البدل (*) للحصول على امتدادات محددة فقط ، كما هو موضح أدناه.glob.glob('./testdir/*.jpg')
يمكن استخدام مطابقة النمط التالية.
*
: يطابق كل شيء.?
يتطابق مع أي حرف واحد.[abc]
: يطابق حرفًا واحدًا من a أو b أو c.[!abc]
: يطابق حرفًا واحدًا بخلاف a أو b أو c
إعادة التسمية باستخدام os.rename ()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
أعد تسمية الملف أو الدليل src إلى dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
استخدم وظيفة rename () للوحدة os ، والتي ستعيد تسميتها كما يوحي الاسم.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
بعد ذلك ، ستتم إعادة تسمية a.jpg إلى a_000.jpg.
إنشاء أرقام متسلسلة مملوءة بصفر باستخدام تنسيق str.format ()
على سبيل المثال ، عند إضافة أرقام متسلسلة إلى عشرات الملفات ، نريد استخدام “00” أو “11” بدلاً من “0” أو “1”. إذا كنت تريد ملء الأصفار بهذه الطريقة ، فاستخدم طريقة str.format ().
str.format(args,* kwargs)
ينفذ عمليات تنسيق السلسلة. يمكن أن تحتوي السلسلة التي تستدعي هذه الطريقة على أحرف عادية أو حقول بديلة مفصولة بـ {}.Built-in Types — Python 3.10.0 Documentation
بناء جملة سلاسل مواصفات التنسيق
تحتوي سلسلة التنسيق على “حقل الاستبدال” المحاط بأقواس متعرجة {}.تكون صيغة حقل الاستبدال كما يلي:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
بعبارات أبسط ، يبدأ حقل الاستبدال بـ field_name ، مما يؤدي إلى تنسيق قيمة الكائن المحدد وإدراجها في الإخراج بدلاً من حقل الاستبدال. بعد اسم الحقل ، يمكن أن يتبع حقل التحويل علامة تعجب ‘! بعد اسم الحقل ، يمكن أن يتبع حقل التحويل علامة تعجب ‘! يمكن كتابة format_spec بنقطتين “:” في النهاية. يحدد هذا التنسيق غير الافتراضي للقيمة المطلوب استبدالها.
string — Common string operations — Python 3.10.0 Documentation
إذا كنت تريد تعبئته بـ 0 في الوقت الحالي ، فقم بما يلي.
# 3を2桁でゼロ埋め print('{0:02d}'.format(3)) # => 03 # Fill in the zeros with three and four digits for 4 and 6, respectively. print('{0:03d}, {1:04d}'.format(4, 6)) # => 004, 0006
مثال على رمز لإضافة سلسلة / رقم متسلسل قبل الملف
أولاً ، احصل على اسم الملف باستخدام os.path.basename (). بعد ذلك ، أضف سلسلة أو رقمًا متسلسلًا أمام اسم الملف ، وقم بربطها بالمسار الأصلي باستخدام os.path.join ().
المثال التالي يضيف img_ إلى مقدمة كل أسماء الملفات.
import os import glob path = "./testdir" files = glob.glob(path + '/*') for f in files: os.rename(f, os.path.join(path, 'img_' + os.path.basename(f)))
والنتيجة هي على النحو التالي.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
إذا كنت تريد إضافة أرقام متسلسلة ، فغيّر عبارة for إلى شيء مثل هذا: عدّد () للحصول على الأرقام التي تم عدها بالترتيب من 0. في هذه الحالة ، يتم تعبئة الرقم بثلاثة أرقام.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
ها هي النتيجة.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
إذا كنت تريد أن تبدأ بـ 1 بدلاً من 0 ، فاضبط الوسيطة الثانية للعداد على 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
يذهب مثل هذا.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
مثال على رمز لإضافة سلسلة / رقم متسلسل بعد الملف
استخدم os.path.splitext () لتقسيم الملف إلى امتداد ومسار جذر ، ثم أضف سلاسل أو أرقامًا متسلسلة إلى مسار الجذر. في المثال التالي ، تتم إضافة _img بعد كل أسماء الملفات.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
والنتيجة هي هذه.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
كما هو الحال مع إضافة سلسلة / رقم متسلسل قبل ملف ، قم بتغيير عبارة for عند إضافة رقم متسلسل.
for i, f in enumerate(files): ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_' + '{0:03d}'.format(i) + fext)
. └── testdir ├── a_000.jpg ├── b_001.jpg ├── c_002.jpg ├── d_003.jpg └── e_004.jpg