Tiedoston nimen muuttaminen eräajona Pythonissa lisäämällä merkkijonon tai juoksevan numeron tiedostonimen eteen ja jälkeen.

liiketoiminta

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
Copied title and URL