- Преименувайте масово с помощта на модула 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 shell.
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 можете да получите следното, като добавите аргумента path../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, което води до форматиране на стойността на посочения обект и вмъкването му в изхода вместо заместващото поле. След field_name полето за преобразуване може да бъде последвано от възклицателен знак '! След 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 на нещо подобно: 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