- Hromadné premenovanie pomocou modulu os a modulu glob.
- Získanie zoznamu súborov pomocou modulu glob
- Premenovanie pomocou os.rename()
- Generovanie nulou vyplnených sekvenčných čísel pomocou funkcie str.format()
- Príklad kódu na pridanie reťazca a poradového čísla pred súbor
- Príklad kódu na pridanie reťazca a poradového čísla za súbor
Hromadné premenovanie pomocou modulu os a modulu glob.
Pomocou modulu os a modulu glob môžete hromadne meniť a premenovávať názvy súborov v priečinku pridávaním reťazcov alebo postupných čísel pred a za názvy súborov.
Príklad štruktúry súboru
Ako príklad si vezmite nasledujúcu štruktúru súborov. V tomto prípade sa predpokladá, že v priečinku sú len súbory (žiadne priečinky).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Čo treba mať na pamäti
Keďže proces zahŕňa premenovanie súboru, uložte pôvodný súbor samostatne, aby ste ho mohli zachrániť v prípade zlyhania.
Získanie zoznamu súborov pomocou modulu glob
Modul glob nájde všetky názvy ciest, ktoré zodpovedajú zadanému vzoru podľa pravidiel používaných v unixovom shelli.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Na získanie zoznamu názvov súborov a adresárov v aktuálnom adresári možno použiť napríklad nasledujúcu funkciu.glob.glob('./*')
Argumentom môže byť absolútna cesta alebo relatívna cesta.
V tomto príklade by to vyzeralo takto.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Namiesto súboru a.jpg môžete získať nasledujúci súbor s pridaným argumentom cesta../testdir/a.jpg
Môžete tiež použiť zástupné znaky (*), aby ste získali len konkrétne prípony, ako je uvedené nižšie.glob.glob('./testdir/*.jpg')
Je možné použiť nasledujúce porovnávanie vzorov.
*
: Zodpovedá všetkému.?
Zodpovedá ľubovoľnému jednotlivému znaku.[abc]
: Zodpovedá jednému znaku z a, b alebo c.[!abc]
: Zodpovedá jednému znaku inému ako a, b alebo c
Premenovanie pomocou os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Premenujte súbor alebo adresár src na dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Použite funkciu rename() modulu os, ktorá ho premenuje podľa názvu.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Potom sa súbor a.jpg premenuje na a_000.jpg.
Generovanie nulou vyplnených sekvenčných čísel pomocou funkcie str.format()
Napríklad pri pridávaní sekvenčných čísel do desiatok súborov chceme použiť „00“ alebo „11“ namiesto „0“ alebo „1“. Ak chcete takto vyplniť nuly, použite metódu str.format().
str.format(args,*kwargs)
Vykonáva operácie formátovania reťazca. Reťazec, ktorý vyvoláva túto metódu, môže obsahovať bežné znaky alebo substitučné polia oddelené znakmi {}.Built-in Types — Python 3.10.0 Documentation
Syntax reťazcov špecifikácie formátu
Formátovací reťazec obsahuje „náhradné pole“ uzavreté v kučeravých zátvorkách {}.Syntax náhradného poľa je nasledujúca:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Zjednodušene povedané, náhradné pole začína názvom_poľa, čo spôsobí, že namiesto náhradného poľa sa naformátuje a do výstupu vloží hodnota zadaného objektu. Za menom_poľa môže nasledovať výkričník '! Za menom_poľa môže nasledovať výkričník '! Za menom_poľa môže nasledovať výkričník '! Format_spec môže byť zapísaný s dvojbodkou ':' na konci. Tým sa špecifikuje iný ako predvolený formát hodnoty, ktorá sa má nahradiť.
string — Common string operations — Python 3.10.0 Documentation
Ak ho chcete zatiaľ vyplniť hodnotou 0, postupujte takto.
# 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
Príklad kódu na pridanie reťazca a poradového čísla pred súbor
Najprv získajte názov súboru pomocou funkcie os.path.basename(). Potom pred názov súboru pridajte reťazec alebo poradové číslo a spojte ho s pôvodnou cestou pomocou os.path.join().
Nasledujúci príklad pridáva img_ na začiatok všetkých názvov súborov.
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)))
Výsledok je nasledovný.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Ak chcete pridať postupné čísla, zmeňte príkaz for na niečo podobné: enumerate(), aby sa čísla počítali v poradí od 0. V tomto prípade je číslo vyplnené tromi číslicami.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Tu je výsledok.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Ak chcete namiesto 0 začať s 1, nastavte druhý argument enumerate na 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Je to takto.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Príklad kódu na pridanie reťazca a poradového čísla za súbor
Pomocou funkcie os.path.splitext() rozdeľte súbor na príponu a koreňovú cestu a potom do koreňovej cesty pridajte reťazce alebo postupné čísla. V nasledujúcom príklade sa za všetky názvy súborov pridá _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)
Výsledok je takýto.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Rovnako ako pri pridávaní reťazca\sekvenčného čísla pred súbor, aj pri pridávaní sekvenčného čísla zmeňte príkaz 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