- Skupno preimenujte pomoću os modula i glob modula.
- Nabavite popis datoteka s glob modulom
- Preimenuj pomoću os.rename()
- Generiranje sekvencijalnih brojeva ispunjenih nulom pomoću str.format()
- Primjer koda za dodavanje niza/slijednog broja prije datoteke
- Primjer koda za dodavanje niza/slijednog broja nakon datoteke
Skupno preimenujte pomoću os modula i glob modula.
Upotrijebite os modul i glob modul za promjenu i preimenovanje naziva datoteka u mapi masovno dodavanjem nizova ili uzastopnih brojeva ispred i iza naziva datoteka.
Primjer strukture datoteke
Uzmite sljedeću strukturu datoteke kao primjer. U ovom slučaju, pretpostavlja se da u mapi postoje samo datoteke (nema mapa).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Stvari koje treba imati na umu
Budući da proces uključuje preimenovanje datoteke, spremite originalnu datoteku zasebno kako bi se mogla spremiti u slučaju neuspjeha.
Nabavite popis datoteka s glob modulom
Modul glob će pronaći sve nazive puteva koji odgovaraju navedenom uzorku prema pravilima koja koristi Unix ljuska.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Na primjer, sljedeća funkcija može se koristiti za dobivanje popisa imena datoteka i imenika u trenutnom direktoriju.glob.glob('./*')
Argument može biti apsolutni ili relativni put.
U ovom primjeru to bi izgledalo ovako.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Umjesto a.jpg, možete dobiti sljedeće, s dodanom stazom argumenta../testdir/a.jpg
Također možete koristiti zamjenske znakove (*) da biste dobili samo određena proširenja, kao što je prikazano u nastavku.glob.glob('./testdir/*.jpg')
Može se koristiti sljedeće podudaranje uzoraka.
*
: Odgovara svemu.?
Odgovara bilo kojem pojedinačnom znaku.[abc]
: odgovara jednom znaku iz a, b ili c.[!abc]
: Odgovara samo jednom znaku osim a, b ili c
Preimenuj pomoću os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Preimenujte datoteku ili direktorij src u dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Upotrijebite funkciju rename() os modula, koja će ga preimenovati kako ime sugerira.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Zatim će a.jpg biti preimenovan u a_000.jpg.
Generiranje sekvencijalnih brojeva ispunjenih nulom pomoću str.format()
Na primjer, kada dodajemo uzastopne brojeve na desetke datoteka, želimo koristiti “00” ili “11” umjesto “0” ili “1”. Ako želite ispuniti nule na ovaj način, koristite metodu str.format().
str.format(args,*kwargs)
Izvodi operacije oblikovanja niza. Niz koji poziva ovu metodu može sadržavati normalne znakove ili zamjenska polja odvojena {}.Built-in Types — Python 3.10.0 Documentation
Sintaksa nizova specifikacije formata
Niz za oblikovanje sadrži “zamjensko polje” zatvoreno u vitičaste zagrade {}.Sintaksa zamjenskog polja je sljedeća:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Jednostavnije rečeno, zamjensko polje počinje s field_name, što uzrokuje da se vrijednost navedenog objekta formatira i umetne u izlaz umjesto zamjenskog polja. Nakon polja_name, polje za pretvorbu može biti praćeno uskličnikom ‘! Nakon polja_name, polje za pretvorbu može biti praćeno uskličnikom ‘! Format_spec može se napisati s dvotočkom ‘:’ na kraju. Ovo određuje nezadani format vrijednosti koja se zamjenjuje.
string — Common string operations — Python 3.10.0 Documentation
Ako ga za sada želite ispuniti s 0, učinite sljedeće.
# 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
Primjer koda za dodavanje niza/slijednog broja prije datoteke
Prvo uzmite naziv datoteke pomoću os.path.basename(). Zatim dodajte niz ili sekvencijalni broj ispred naziva datoteke i spojite ga s izvornom stazom pomoću os.path.join().
Sljedeći primjer dodaje img_ na početak svih naziva datoteka.
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)))
Rezultat je sljedeći.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Ako želite dodati sekvencijalne brojeve, promijenite izraz for u nešto poput ovoga: enumerate() da biste dobili brojeve koji se broje redom od 0. U ovom slučaju, broj je ispunjen s tri znamenke.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Evo rezultata.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Ako želite započeti s 1 umjesto 0, postavite drugi 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)))
To ide ovako.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Primjer koda za dodavanje niza/slijednog broja nakon datoteke
Koristite os.path.splitext() da biste datoteku podijelili na ekstenziju i korijenski put, a zatim dodajte nizove ili sekvencijalne brojeve korijenskom putu. U sljedećem primjeru, _img se dodaje iza svih naziva datoteka.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Rezultat je ovaj.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Kao i kod dodavanja niza/slijednog broja prije datoteke, promijenite naredbu for kada dodajete sekvencijalni broj.
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