- Nimeä uudelleen irtotavarana käyttäen os-moduulia ja glob-moduulia.
- Hae tiedostoluettelo glob-moduulilla
- Nimeä uudelleen os.rename():lla
- Nollatäytteisten juoksevien numeroiden tuottaminen str.format() -toiminnolla
- Esimerkki koodista, jolla lisätään merkkijono\järjestysnumero ennen tiedostoa
- Esimerkki koodista, jolla tiedoston perään lisätään merkkijono\juokseva luku
Nimeä uudelleen irtotavarana käyttäen os-moduulia ja glob-moduulia.
Käytä os-moduulia ja glob-moduulia muuttaaksesi ja nimetessäsi uudelleen kansion tiedostonimiä irtotavarana lisäämällä merkkijonoja tai juoksevia numeroita tiedostonimien eteen ja jälkeen.
Esimerkkitiedoston rakenne
Esimerkkinä seuraava tiedostorakenne. Tässä tapauksessa oletetaan, että kansiossa on vain tiedostoja (ei kansioita).
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Huomioitavaa
Koska prosessiin kuuluu tiedoston uudelleennimeäminen, tallenna alkuperäinen tiedosto erikseen, jotta se voidaan tallentaa epäonnistumisen varalta.
Hae tiedostoluettelo glob-moduulilla
Glob-moduuli etsii kaikki polunnimet, jotka vastaavat määritettyä mallia Unixin komentotulkin käyttämien sääntöjen mukaisesti.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Esimerkiksi seuraavalla funktiolla voidaan saada luettelo nykyisen hakemiston tiedostojen ja hakemistojen nimistä.glob.glob('./*')
Argumentti voi olla absoluuttinen tai suhteellinen polku.
Tässä esimerkissä se näyttäisi seuraavalta.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
A.jpg:n sijasta saat seuraavan kuvan, johon on lisätty argumenttipolku../testdir/a.jpg
Voit myös käyttää jokerimerkkejä (*) saadaksesi vain tietyt laajennukset, kuten alla näkyy.glob.glob('./testdir/*.jpg')
Seuraavaa kuvion täsmäytystä voidaan käyttää.
*
: Sopii kaikkeen.?
Sopii mihin tahansa yksittäiseen merkkiin.[abc]
: Sopii yhteen merkkiin a:n, b:n tai c:n joukossa.[!abc]
: Sopii yhteen yksittäiseen merkkiin, joka on muu kuin a, b tai c.
Nimeä uudelleen os.rename():lla
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Nimeä tiedosto tai hakemisto src uudelleen dst:ksi.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Käytä os-moduulin funktiota rename(), joka nimeää sen uudelleen nimensä mukaisesti.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Tämän jälkeen a.jpg nimetään uudelleen muotoon a_000.jpg.
Nollatäytteisten juoksevien numeroiden tuottaminen str.format() -toiminnolla
Kun esimerkiksi lisätään juoksevia numeroita kymmeniin tiedostoihin, halutaan käyttää ”00” tai ”11” eikä ”0” tai ”1”. Jos haluat täyttää nollat tällä tavoin, käytä str.format()-metodia.
str.format(args,*kwargs)
Suorittaa merkkijonon muotoilutoimintoja. Tätä metodia käyttävä merkkijono voi sisältää tavallisia merkkejä tai {}:llä erotettuja korvaavia kenttiä.Built-in Types — Python 3.10.0 Documentation
Muotomäärittelymerkkijonojen syntaksi
Muotoilujono sisältää ”korvaavan kentän” sulkeissa {}.Korvauskentän syntaksi on seuraava:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Yksinkertaisemmin sanottuna korvaava kenttä alkaa field_name-kentällä, jolloin määritetyn objektin arvo muotoillaan ja lisätään tulosteeseen korvaavan kentän sijasta. Kentän_nimen jälkeen voidaan korvauskenttää seurata huutomerkki '! Kentän_nimen jälkeen voidaan korvauskenttää seurata huutomerkki '! Format_spec voidaan kirjoittaa kaksoispisteellä ':' lopussa. Tämä määrittää korvattavan arvon muun kuin oletusmuodon.
string — Common string operations — Python 3.10.0 Documentation
Jos haluat täyttää sen toistaiseksi 0:lla, toimi seuraavasti.
# 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
Esimerkki koodista, jolla lisätään merkkijono\järjestysnumero ennen tiedostoa
Hae ensin tiedoston nimi komennolla os.path.basename(). Lisää sitten merkkijono tai juokseva numero tiedostonimen eteen ja liitä se alkuperäiseen polkuun os.path.join()-ohjelmalla.
Seuraavassa esimerkissä lisätään img_ kaikkien tiedostonimien eteen.
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)))
Tulos on seuraava.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Jos haluat lisätä juoksevia numeroita, vaihda for-lauseke seuraavanlaiseksi: enumerate(), jotta numerot lasketaan järjestyksessä 0:sta alkaen.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Tässä on tulos.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Jos haluat aloittaa 1:llä 0:n sijasta, aseta enumerate-kohdan toisen argumentin arvoksi 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Se menee näin.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Esimerkki koodista, jolla tiedoston perään lisätään merkkijono\juokseva luku
Käytä os.path.splitext()-toimintoa jakamaan tiedosto laajennukseen ja juuripolkuun ja lisää sitten merkkijonoja tai juoksevia numeroita juuripolkuun. Seuraavassa esimerkissä _img lisätään kaikkien tiedostonimien jälkeen.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Tulos on tämä.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Samoin kuin lisätessäsi merkkijonon juoksevan numeron tiedoston eteen, muuta for-lausetta, kun lisäät juoksevan numeron.
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