تقوم الدفعة بتغيير اسم الملف في Python عن طريق إضافة سلسلة أو رقم تسلسلي قبل اسم الملف وبعده

اعمال

إعادة التسمية بكميات كبيرة باستخدام وحدة نظام التشغيل ووحدة الكرة الأرضية.

استخدم وحدة 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