- Množično preimenovanje z uporabo modula os in modula glob.
- Pridobite seznam datotek z modulom glob
- Preimenovanje z os.rename()
- Ustvarjanje zaporednih številk z ničelno vrednostjo s funkcijo str.format()
- Primer kode za dodajanje niza in zaporedne številke pred datoteko
- Primer kode za dodajanje niza zaporednih številk za datoteko
Množično preimenovanje z uporabo modula os in modula glob.
Uporabite modul os in modul glob za množično spreminjanje in preimenovanje imen datotek v mapi z dodajanjem nizov ali zaporednih številk pred in za imeni datotek.
Primer strukture datoteke
Za primer vzemimo naslednjo strukturo datotek. V tem primeru se predpostavlja, da so v mapi samo datoteke (brez map).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Stvari, ki jih je treba upoštevati
Ker postopek vključuje preimenovanje datoteke, originalno datoteko shranite ločeno, da jo lahko shranite v primeru neuspeha.
Pridobite seznam datotek z modulom glob
Modul glob bo poiskal vsa imena poti, ki ustrezajo navedenemu vzorcu, v skladu s pravili, ki jih uporablja lupina Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Naslednjo funkcijo lahko na primer uporabite za pridobitev seznama imen datotek in imenikov v trenutnem imeniku.glob.glob('./*')
Argument je lahko absolutna ali relativna pot.
V tem primeru je videti takole.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Namesto datoteke a.jpg lahko z dodanim argumentom pot dobite naslednjo datoteko../testdir/a.jpg
Uporabite lahko tudi nadomestne znake (*), da dobite samo določene razširitve, kot je prikazano spodaj.glob.glob('./testdir/*.jpg')
Uporabite lahko naslednje ujemanje vzorcev.
*
: Ujema se z vsem.?
Ustreza kateremu koli posameznemu znaku.[abc]
: Ujema en sam znak iz znakov a, b ali c.[!abc]
: ustreza enemu znaku, ki ni znak a, b ali c
Preimenovanje z os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Preimenovanje datoteke ali imenika src v dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Uporabite funkcijo rename() modula os, ki ga bo preimenovala, kot nakazuje ime.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Nato se a.jpg preimenuje v a_000.jpg.
Ustvarjanje zaporednih številk z ničelno vrednostjo s funkcijo str.format()
Če na primer dodajamo zaporedne številke več deset datotekam, želimo uporabiti “00” ali “11” namesto “0” ali “1”. Če želite na ta način izpolniti ničle, uporabite metodo str.format().
str.format(args,*kwargs)
Izvaja operacije oblikovanja nizov. Niz, ki kliče to metodo, lahko vsebuje običajne znake ali nadomestna polja, ločena s {}.Built-in Types — Python 3.10.0 Documentation
Sintaksa nizov specifikacije formata
Oblikovni niz vsebuje “nadomestno polje”, zaprto v oglatih oklepajih {}.Sintaksa polja za zamenjavo je naslednja:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Poenostavljeno povedano, nadomestno polje se začne z imenom_polja, zaradi česar se namesto nadomestnega polja oblikuje in v izhod vstavi vrednost določenega predmeta. Za imenom_polja lahko nadomestnemu polju sledi vzklikalnik '! Za imenom_polja lahko nadomestnemu polju sledi vzklikalnik '! Format_spec lahko zapišemo z dvopičjem ':' na koncu. Ta določa neprivzeto obliko vrednosti, ki jo je treba nadomestiti.
string — Common string operations — Python 3.10.0 Documentation
Če ga želite za zdaj napolniti z 0, naredite naslednje.
# 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
Primer kode za dodajanje niza in zaporedne številke pred datoteko
Najprej s funkcijo os.path.basename() pridobite ime datoteke. Nato pred ime datoteke dodajte niz ali zaporedno številko in jo združite z izvirno potjo s pomočjo os.path.join().
Naslednji primer doda img_ na začetek vseh imen datotek.
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 naslednji.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Če želite dodati zaporedne številke, spremenite stavek for v nekaj takega: enumerate(), da dobite številke, ki se štejejo po vrstnem redu od 0. V tem primeru je številka izpolnjena s tremi številkami.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Tukaj je rezultat.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Če želite začeti z 1 namesto z 0, nastavite 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 se glasi takole.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Primer kode za dodajanje niza zaporednih številk za datoteko
Uporabite os.path.splitext() za razdelitev datoteke na razširitev in korensko pot, nato pa korenski poti dodajte nize ali zaporedne številke. V naslednjem primeru se za vsemi imeni datotek doda _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)
Rezultat je naslednji.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Tako kot pri dodajanju zaporedne številke pred datoteko tudi pri dodajanju zaporedne številke spremenite stavek 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