- Преименујте масовно користећи ос модул и глоб модул.
- Преузмите листу датотека са глоб модулом
- Преименуј помоћу ос.ренаме()
- Генерисање секвенцијалних бројева попуњених нулом помоћу стр.формат()
- Пример кода за додавање стринга/редног броја пре датотеке
- Пример кода за додавање стринга/редног броја после датотеке
Преименујте масовно користећи ос модул и глоб модул.
Користите ос модул и глоб модул да бисте променили и преименовали називе датотека у фасцикли масовно додавањем низова или узастопних бројева пре и после имена датотека.
Пример структуре датотеке
Узмите следећу структуру датотеке као пример. У овом случају, претпоставља се да постоје само датотеке (нема фасцикли) у фасцикли.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Ствари које треба имати на уму
Пошто процес укључује преименовање датотеке, сачувајте оригиналну датотеку одвојено како би се могла сачувати у случају неуспеха.
Преузмите листу датотека са глоб модулом
Модул глоб ће пронаћи све путање које одговарају наведеном шаблону у складу са правилима која користи Уник шкољка.
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']
Уместо а.јпг, можете добити следеће, са додатком путање аргумента../testdir/a.jpg
Такође можете да користите замене (*) да бисте добили само одређена проширења, као што је приказано у наставку.glob.glob('./testdir/*.jpg')
Може се користити следеће подударање шаблона.
*
: Одговара свему.?
Одговара било ком појединачном знаку.[abc]
: Поклапа се са једним знаком из а, б или ц.[!abc]
: Одговара само једном знаку осим а, б или ц
Преименуј помоћу ос.ренаме()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Преименујте датотеку или директоријум срц у дст.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Користите функцију ренаме() ос модула, која ће га преименовати као што име сугерише.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Затим ће а.јпг бити преименован у а_000.јпг.
Генерисање секвенцијалних бројева попуњених нулом помоћу стр.формат()
На пример, када додајемо секвенцијалне бројеве на десетине датотека, желимо да користимо „00“ или „11“ уместо „0“ или „1“. Ако желите да попуните нуле на овај начин, користите метод стр.формат().
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
Пример кода за додавање стринга/редног броја пре датотеке
Прво узмите име датотеке помоћу ос.патх.басенаме(). Затим додајте стринг или секвенцијални број испред имена датотеке и повежите га са оригиналном путањом помоћу ос.патх.јоин().
Следећи пример додаје имг_ на почетак свих имена датотека.
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
Ако желите да додате секвенцијалне бројеве, промените израз фор у нешто овако: енумерате() да бисте добили бројеве који се броје по редоследу од 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
Пример кода за додавање стринга/редног броја после датотеке
Користите ос.патх.сплитект() да бисте поделили датотеку на екстензију и корен путању, а затим додајте низове или секвенцијалне бројеве у корен путању. У следећем примеру, _имг се додаје иза свих имена датотека.
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 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