- Масово перейменуйте за допомогою модулів os і glob.
- Отримайте список файлів за допомогою модуля glob
- Перейменувати за допомогою os.rename()
- Створення послідовних чисел, заповнених нулем, за допомогою str.format()
- Приклад коду для додавання рядка/порядкового номера перед файлом
- Приклад коду для додавання рядка/порядкового номера після файлу
Масово перейменуйте за допомогою модулів os і glob.
Використовуйте модуль 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, що змушує форматувати значення вказаного об’єкта та вставляти його у вихідні дані замість поля заміни. Після поля_назва після поля перетворення може стояти знак оклику ‘! Після поля_назва після поля перетворення може стояти знак оклику ‘! Формат_спец можна записати з двокрапкою ‘:’ в кінці. Це визначає формат значення, яке потрібно замінити, не за замовчуванням.
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 на щось на зразок цього: enumerate(), щоб числа підраховувалися в порядку від 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, встановіть другий аргумент enumerate на 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