- Nimetage massiliselt ümber, kasutades os-moodulit ja glob-moodulit.
- Saada failide nimekiri globi mooduliga
- Ümbernimetamine funktsiooniga os.rename()
- Nulliga täidetud järjestikuste numbrite genereerimine str.format() abil
- Näide koodist, mis lisab faili ette string\jooksva numbri
- Näide koodist, mis lisab faili järel string\jooksva numbri
Nimetage massiliselt ümber, kasutades os-moodulit ja glob-moodulit.
Kasutage os-moodulit ja glob-moodulit, et muuta ja ümber nimetada massiliselt kaustas olevaid failinimesid, lisades failinimede ette ja järele stringid või järjekorranumbrid.
Näidisfaili struktuur
Võtame näiteks järgmise faili struktuuri. Sel juhul eeldatakse, et kaustas on ainult failid (mitte kaustad).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Asjad, mida silmas pidada
Kuna protsess hõlmab faili ümbernimetamist, salvestage originaalfail eraldi, et seda saaks ebaõnnestumise korral päästa.
Saada failide nimekiri globi mooduliga
Glob-moodul leiab kõik teekonnanimed, mis vastavad määratud mustrile vastavalt Unixi shell'i poolt kasutatavatele reeglitele.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Näiteks saab praeguse kataloogi failide ja kataloogide nimede loendi saamiseks kasutada järgmist funktsiooni.glob.glob('./*')
Argumendiks võib olla absoluutne tee või suhteline tee.
Selles näites näeb see välja järgmiselt.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Faili a.jpg asemel saate järgmise tulemuse, millele on lisatud argumendi tee../testdir/a.jpg
Võite kasutada ka metsikuid sümboleid (*), et saada ainult konkreetseid laiendusi, nagu allpool näidatud.glob.glob('./testdir/*.jpg')
Kasutada saab järgmist mustri sobitamist.
*
: Sobib kõigega.?
Vastab mis tahes üksikule tähemärgile.[abc]
: Vastab üksiku tähemärgi a, b või c hulgast.[!abc]
: Vastab ühele tähemärgile, mis ei ole a, b või c.
Ümbernimetamine funktsiooniga os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Nimetage fail või kataloog src ümber dst-ks.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Kasutage os-mooduli funktsiooni rename(), mis nimetab selle ümber vastavalt nimele.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Seejärel nimetatakse fail a.jpg ümber failiks a_000.jpg.
Nulliga täidetud järjestikuste numbrite genereerimine str.format() abil
Näiteks, kui lisame kümnetele failidele järjestikuseid numbreid, soovime kasutada “00” või “11”, mitte “0” või “1”. Kui soovite nullid niimoodi täita, kasutage meetodit str.format().
str.format(args,*kwargs)
Teostab stringi vormindamise operatsioone. Seda meetodit käivitav string võib sisaldada tavalisi sümboleid või asendusvälju, mis on eraldatud {}-ga.Built-in Types — Python 3.10.0 Documentation
Vorminguspetsifikaadi stringide süntaks
Vormingu string sisaldab “asendusvälja”, mis on ümbritsetud kõverate sulgude {} sisse.Asendusvälja süntaks on järgmine:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Lihtsamalt öeldes algab asendusväli väljaga field_name, mis põhjustab, et asendusvälja asemel vormindatakse ja sisestatakse väljundisse määratud objekti väärtus. Pärast field_name võib teisendusväljale järgneda hüüumärk '! Pärast field_name võib teisendusväljale järgneda hüüumärk '! Format_spec võib kirjutada kooloniga ':' lõpus. See määrab asendatava väärtuse mittetäieliku formaadi.
string — Common string operations — Python 3.10.0 Documentation
Kui soovite seda esialgu täita 0-ga, tehke järgmist.
# 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
Näide koodist, mis lisab faili ette string\jooksva numbri
Esmalt saad faili nime abil os.path.basename(). Seejärel lisage failinime ette string või järjekorranumber ja ühendage see algse teega os.path.join().
Järgmine näide lisab kõigi failinimede ette img_.
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)))
Tulemus on järgmine.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Kui soovite lisada järjestikuseid numbreid, siis muutke for-käsklust millekski selliseks: enumerate(), et saada numbreid loetud järjekorras alates 0. Sellisel juhul täidetakse number kolme numbriga.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Siin on tulemus.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Kui soovite alustada 0 asemel 1-st, seadke enumerate teise argumendi väärtuseks 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
See käib nii.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Näide koodist, mis lisab faili järel string\jooksva numbri
Kasutage os.path.splitext(), et jagada fail laiendiks ja juurteeks ning seejärel lisada juurteele stringid või järjekorranumbrid. Järgmises näites lisatakse _img kõigi failinimede järele.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Tulemus on järgmine.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Sarnaselt string\jooksva numbri lisamisega enne faili, muutke for-avaldust, kui lisate järjestikuse numbri.
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