- Redenumiți în bloc folosind modulul os și modulul glob.
- Obțineți lista de fișiere cu modulul glob
- Redenumire cu os.rename()
- Generarea de numere secvențiale completate cu zero cu str.format()
- Exemplu de cod pentru a adăuga un număr secvențial înaintea unui fișier
- Exemplu de cod pentru a adăuga un număr secvențial după un fișier
Redenumiți în bloc folosind modulul os și modulul glob.
Utilizați modulul os și modulul glob pentru a modifica și redenumi numele fișierelor dintr-un dosar în bloc, adăugând șiruri de caractere sau numere secvențiale înainte și după numele fișierelor.
Exemplu de structură a fișierelor
Să luăm ca exemplu următoarea structură de fișiere. În acest caz, se presupune că în dosar există numai fișiere (fără foldere).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Lucruri de care trebuie să țineți cont
Deoarece procesul implică redenumirea fișierului, salvați separat fișierul original, astfel încât acesta să poată fi salvat în caz de eșec.
Obțineți lista de fișiere cu modulul glob
Modulul glob va găsi toate numele de cale care se potrivesc cu modelul specificat în conformitate cu regulile utilizate de shell-ul Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
De exemplu, următoarea funcție poate fi utilizată pentru a obține o listă de nume de fișiere și directoare din directorul curent.glob.glob('./*')
Argumentul poate fi o cale absolută sau o cale relativă.
În acest exemplu, ar arăta după cum urmează.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
În loc de a.jpg, puteți obține următorul text, cu argumentul path adăugat../testdir/a.jpg
De asemenea, puteți utiliza caractere wildcard (*) pentru a obține numai anumite extensii, după cum se arată mai jos.glob.glob('./testdir/*.jpg')
Se poate utiliza următoarea potrivire de tipare.
*
: Se potrivește cu totul.?
Se potrivește cu orice caracter unic.[abc]
: Potrivește un singur caracter din a, b sau c.[!abc]
: Se potrivește cu un singur caracter, altul decât a, b sau c
Redenumire cu os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Redenumește fișierul sau directorul src în dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Utilizați funcția rename() din modulul os, care îl va redenumi așa cum sugerează numele.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Apoi, a.jpg va fi redenumit în a_000.jpg.
Generarea de numere secvențiale completate cu zero cu str.format()
De exemplu, atunci când adăugăm numere secvențiale la zeci de fișiere, dorim să folosim „00” sau „11” în loc de „0” sau „1”. Dacă doriți să completați zerourile în acest mod, utilizați metoda str.format().
str.format(args,*kwargs)
Efectuează operații de formatare a șirurilor de caractere. Șirul care invocă această metodă poate conține caractere normale sau câmpuri de substituție separate prin {}.Built-in Types — Python 3.10.0 Documentation
Sintaxa șirurilor de caractere de specificare a formatului
Șirul de formatare conține „câmpul de înlocuire” încadrat între paranteze {}.Sintaxa câmpului de înlocuire este următoarea:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
În termeni mai simpli, câmpul de înlocuire începe cu nume_câmp, ceea ce face ca valoarea obiectului specificat să fie formatată și inserată în ieșire în locul câmpului de înlocuire. După field_name, câmpul de conversie poate fi urmat de un semn de exclamare '! După field_name, câmpul de conversie poate fi urmat de un semn de exclamare '! Format_spec poate fi scris cu două puncte „:” la sfârșit. Acesta specifică formatul care nu este cel standard al valorii care urmează să fie înlocuită.
string — Common string operations — Python 3.10.0 Documentation
Dacă doriți să o umpleți cu 0 pentru moment, procedați după cum urmează.
# 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
Exemplu de cod pentru a adăuga un număr secvențial înaintea unui fișier
În primul rând, obțineți numele fișierului cu os.path.basename(). Apoi, adăugați un șir de caractere sau un număr secvențial în fața numelui de fișier și concatenați-l cu calea originală cu os.path.join().
Următorul exemplu adaugă img_ în fața tuturor numelor de fișiere.
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)))
Rezultatul este următorul.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Dacă doriți să adăugați numere secvențiale, schimbați instrucțiunea for în ceva de genul următor: enumerate() pentru a obține numerele numărate în ordine de la 0. În acest caz, numărul este completat cu trei cifre.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Iată rezultatul.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Dacă doriți să începeți cu 1 în loc de 0, setați al doilea argument al enumerării la 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Se întâmplă cam așa.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Exemplu de cod pentru a adăuga un număr secvențial după un fișier
Folosiți os.path.splitext() pentru a împărți fișierul în extensie și cale rădăcină, apoi adăugați șiruri de caractere sau numere secvențiale la calea rădăcină. În exemplul următor, _img este adăugat după toate numele de fișiere.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Rezultatul este următorul.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Ca și în cazul adăugării unui număr secvențial înaintea unui fișier, modificați instrucțiunea for atunci când adăugați un număr secvențial.
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