- Tömeges átnevezés az os modul és a glob modul használatával.
- A fájllista kinyerése a glob modullal
- Átnevezés az os.rename() segítségével
- Nullával kitöltött sorszámok generálása str.format() segítségével
- Kódpélda egy string\sequenciális szám hozzáadására egy fájl előtt
- Példa egy string\sequenciális szám hozzáadására egy fájl után
Tömeges átnevezés az os modul és a glob modul használatával.
Az os modul és a glob modul segítségével tömegesen megváltoztathatja és átnevezheti a mappában lévő fájlneveket a fájlnevek előtti és utáni karakterláncok vagy sorszámok hozzáadásával.
Példa fájlszerkezet
Vegyük példaként a következő fájlszerkezetet. Ebben az esetben feltételezzük, hogy a mappában csak fájlok vannak (mappák nélkül).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Amit szem előtt kell tartani
Mivel a folyamat a fájl átnevezésével jár, mentse el az eredeti fájlt külön, hogy hiba esetén is meg lehessen menteni.
A fájllista kinyerése a glob modullal
A glob modul megtalálja az összes olyan elérési utat, amely megfelel a megadott mintának a Unix shell által használt szabályok szerint.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
A következő függvény például az aktuális könyvtárban található fájl- és könyvtárnevek listájának lekérdezésére használható.glob.glob('./*')
Az argumentum lehet abszolút vagy relatív elérési útvonal.
Ebben a példában ez a következőképpen nézne ki.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Az a.jpg helyett a következőt kaphatja, az argumentum útvonalának hozzáadásával../testdir/a.jpg
Vadjelzőket (*) is használhat, hogy csak bizonyos kiterjesztéseket kapjon, ahogy az alábbiakban látható.glob.glob('./testdir/*.jpg')
A következő mintaillesztés használható.
*
: Mindenhez passzol.?
Egyezik bármelyik karakterrel.[abc]
: Egyezik az a, b vagy c karakterekkel.[!abc]
: Az a, b vagy c karakterektől eltérő egyetlen karaktert talál.
Átnevezés az os.rename() segítségével
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Nevezze át az src fájlt vagy könyvtárat dst-re.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Használja az os modul rename() függvényét, amely átnevezi a nevének megfelelően.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Ezután az a.jpg átneveződik a_000.jpg-re.
Nullával kitöltött sorszámok generálása str.format() segítségével
Például, amikor több tucat fájlhoz sorszámokat adunk hozzá, a “00” vagy “11” helyett a “0” vagy “1” számot akarjuk használni. Ha a nullákat ilyen módon szeretnénk kitölteni, használjuk az str.format() metódust.
str.format(args,*kwargs)
A karakterlánc formázási műveleteket végzi. Az ezt a metódust meghívó karakterlánc tartalmazhat normál karaktereket vagy {}-vel elválasztott helyettesítő mezőket.Built-in Types — Python 3.10.0 Documentation
A formátum-specifikációs karakterláncok szintaxisa
A formázási karakterlánc tartalmazza a {} szögletes zárójelbe zárt “csere mezőt”.A csere mező szintaxisa a következő:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Egyszerűbben fogalmazva, a helyettesítő mező a field_name szóval kezdődik, ami azt eredményezi, hogy a megadott objektum értéke lesz formázva és beillesztve a kimenetbe a helyettesítő mező helyett. A field_name után a konverziós mezőt követheti egy felkiáltójel '! A field_name után a konverziós mezőt követheti egy felkiáltójel '! A format_spec írható kettőspont ':' végződéssel. Ez a helyettesítendő érték nem alapértelmezett formátumát adja meg.
string — Common string operations — Python 3.10.0 Documentation
Ha egyelőre 0-val szeretné kitölteni, tegye a következőket.
# 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
Kódpélda egy string\sequenciális szám hozzáadására egy fájl előtt
Először az os.path.basename() segítségével szerezzük meg a fájl nevét. Ezután adjunk egy sztringet vagy sorszámot a fájlnév elé, és az os.path.join() segítségével kapcsoljuk össze az eredeti elérési úttal.
A következő példa az összes fájlnév elejéhez hozzáadja az img_ szót.
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)))
Az eredmény a következő.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Ha egymás utáni számokat akarsz hozzáadni, változtasd meg a for utasítást valami ilyesmire: enumerate(), hogy a számokat 0-tól kezdődő sorrendben számoljuk.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Íme az eredmény.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Ha 0 helyett 1-gyel szeretnénk kezdeni, akkor az enumerate második argumentumát állítsuk 1-re.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Ez így hangzik.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Példa egy string\sequenciális szám hozzáadására egy fájl után
Használja az os.path.splitext() funkciót a fájl kiterjesztésre és gyökérútra való felosztásához, majd adjon hozzá karakterláncokat vagy sorszámokat a gyökérúthoz. A következő példában a _img minden fájlnév után hozzáadódik.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Az eredmény a következő.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Ahogyan a string\sequenciális szám hozzáadásánál a fájl előtt, a for utasítás megváltoztatásával a sorszám hozzáadásakor is változtassa meg a for utasítást.
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