- Перайменаваць масава з дапамогай модуля 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,*кваргі)
Выконвае аперацыі фарматавання радкоў. Радок, які выклікае гэты метад, можа ўтрымліваць звычайныя сімвалы або палі замены, падзеленыя знакам {}.Built-in Types — Python 3.10.0 Documentation
Сінтаксіс радкоў спецыфікацыі фармату
Радок фарматавання змяшчае «поле замены», заключана ў фігурныя дужкі {}.Сінтаксіс поля замены наступны:
replacement_field ::= "{" [field_name] ["!" conversion] [":" 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