Batch ngganti jeneng file ing Python kanthi nambah senar utawa nomer urut sadurunge lan sawise jeneng berkas

Bisnis

Ganti jeneng kanthi akeh nggunakake modul os lan modul glob.

Gunakake modul os lan modul glob kanggo ngganti lan ngganti jeneng file ing folder kanthi akeh kanthi nambah senar utawa nomer urut sadurunge lan sawise jeneng file.

Contoh struktur berkas

Njupuk struktur file ing ngisor iki minangka conto. Ing kasus iki, dianggep mung ana file (ora ana folder) ing folder kasebut.

.
└── testdir
    ├── a.jpg
    ├── b.jpg
    ├── c.jpg
    ├── d.jpg
    └── e.jpg

Bab sing kudu digatekake

Amarga proses kasebut kalebu ngganti jeneng file, simpen file asli kanthi kapisah supaya bisa disimpen yen gagal.

Entuk dhaptar file kanthi modul glob

Modul glob bakal nemokake kabeh pathname sing cocog karo pola sing ditemtokake miturut aturan sing digunakake dening cangkang Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation

Contone, fungsi ing ngisor iki bisa digunakake kanggo entuk dhaptar file lan jeneng direktori ing direktori saiki.
glob.glob('./*')
Argumentasi bisa dadi path absolut utawa path relatif.

Ing conto iki, bakal katon kaya ing ngisor iki.

import glob

print(glob.glob('./testdir/*'))
# => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']

Tinimbang a.jpg, sampeyan bisa entuk ing ngisor iki, kanthi path argumentasi ditambahake.
./testdir/a.jpg

Sampeyan uga bisa nggunakake wildcards (*) kanggo njaluk mung ekstensi tartamtu, minangka kapacak ing ngisor iki.
glob.glob('./testdir/*.jpg')

Pencocokan pola ing ngisor iki bisa digunakake.

  • *: Cocok kabeh.
  • ?Cocog karo karakter siji wae.
  • [abc]: Cocokake karakter siji saka a, b, utawa c.
  • [!abc]: Cocokake karakter siji liyane saka a, b, utawa c

Ganti jeneng nganggo os.rename()

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Ganti jeneng file utawa direktori src dadi dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Gunakake fungsi ganti jeneng () saka modul os, kang bakal ngganti jeneng minangka jeneng tabet.

import os
os.rename('./testdir/a.jpg', './testdir/a_000.jpg')

Banjur, a.jpg bakal diganti jeneng dadi a_000.jpg.

Ngasilake nomer urut sing diisi nol nganggo str.format()

Contone, nalika nambah nomer urut kanggo Welasan file, kita pengin nggunakake “00” utawa “11” tinimbang “0” utawa “1”. Yen sampeyan pengin ngisi nul ing cara iki, nggunakake cara str.format ().

str.format(args,*kwars)
Nindakake operasi format string. String sing nggunakake metode iki bisa ngemot karakter normal utawa kolom substitusi sing dipisahake karo {}.Built-in Types — Python 3.10.0 Documentation

Sintaks format strings spesifikasi
String format ngemot “kolom panggantos” sing dilampirake ing kurung kriting {}.

Sintaks lapangan panggantos kaya ing ngisor iki:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

Ing istilah sing luwih prasaja, kolom panggantos diwiwiti kanthi field_name, sing nyebabake nilai obyek kasebut diformat lan dilebokake ing output tinimbang kolom panggantos. Sawise field_name, kolom konversi bisa diterusake kanthi tandha seru ‘! Sawise field_name, kolom konversi bisa diterusake kanthi tandha seru ‘! Format_spec bisa ditulis nganggo titik titik ‘:’ ing pungkasan. Iki nemtokake format non-standar saka nilai sing bakal diganti.
string — Common string operations — Python 3.10.0 Documentation

Yen sampeyan pengin ngisi 0 kanggo saiki, tindakake ing ngisor iki.

# 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

Conto kode kanggo nambah string / nomer urut sadurunge file

Pisanan, entuk jeneng berkas nganggo os.path.basename(). Banjur, nambah senar utawa nomer urut ing ngarepe jeneng berkas, lan concatenate karo path asli karo os.path.join ().

Conto ing ngisor iki nambahake img_ ing ngarep kabeh jeneng file.

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)))

Asile kaya ing ngisor iki.

.
└── testdir
    ├── img_a.jpg
    ├── img_b.jpg
    ├── img_c.jpg
    ├── img_d.jpg
    └── img_e.jpg

Yen sampeyan pengin nambah nomer urut-urutan, ngganti kanggo statement kaya iki: enumerate () kanggo njaluk nomer diitung ing urutan saka 0. Ing kasus iki, nomer kapenuhan telung digit.

for i, f in enumerate(files):
    os.rename(f, os.path.join(path, '{0:03d}'.format(i) +
                              '_' + os.path.basename(f)))

Iki asile.

.
└── testdir
    ├── 000_a.jpg
    ├── 001_b.jpg
    ├── 002_c.jpg
    ├── 003_d.jpg
    └── 004_e.jpg

Yen sampeyan pengin miwiti karo 1 tinimbang 0, setel argumen kapindho enumerate dadi 1.

for i, f in enumerate(files, 1):
    os.rename(f, os.path.join(path, '{0:03d}'.format(i) +
                              '_' + os.path.basename(f)))

Dadi kaya iki.

.
└── testdir
    ├── 001_a.jpg
    ├── 002_b.jpg
    ├── 003_c.jpg
    ├── 004_d.jpg
    └── 005_e.jpg

Conto kode kanggo nambah string / nomer urut sawise file

Gunakake os.path.splitext () kanggo pamisah file menyang extension lan ROOT path, lan banjur nambah strings utawa nomer urut-urutan kanggo path ROOT. Ing conto ing ngisor iki, _img ditambahake sawise kabeh jeneng file.

import os
import glob

files = glob.glob('./testdir/*')

for f in files:
    ftitle, fext = os.path.splitext(f)
    os.rename(f, ftitle + '_img' + fext)

Asil iki.

.
└── testdir
    ├── a_img.jpg
    ├── b_img.jpg
    ├── c_img.jpg
    ├── d_img.jpg
    └── e_img.jpg

Kaya nambahake string/nomer urut-urutan sadurunge file, ganti statement for nalika nambah nomer urut.

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