Ndryshoni grupin e emrit të skedarit në Python duke shtuar një varg ose numër sekuencial përpara dhe pas emrit të skedarit

biznes

Riemërtoni në masë duke përdorur modulin os dhe modulin glob.

Përdorni modulin os dhe modulin glob për të ndryshuar dhe riemërtuar emrat e skedarëve në një dosje në masë duke shtuar vargje ose numra vijues përpara dhe pas emrave të skedarëve.

Shembull i strukturës së skedarit

Merrni si shembull strukturën e mëposhtme të skedarit. Në këtë rast, supozohet se ka vetëm skedarë (pa dosje) në dosje.

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

Gjërat që duhen mbajtur parasysh

Meqenëse procesi përfshin riemërtimin e skedarit, ruajeni skedarin origjinal veçmas në mënyrë që të ruhet në rast dështimi.

Merrni listën e skedarëve me modulin glob

Moduli glob do të gjejë të gjithë emrat e shtigjeve që përputhen me modelin e specifikuar sipas rregullave të përdorura nga guaska Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation

Për shembull, funksioni i mëposhtëm mund të përdoret për të marrë një listë të emrave të skedarëve dhe drejtorive në drejtorinë aktuale.
glob.glob('./*')
Argumenti mund të jetë një rrugë absolute ose një rrugë relative.

Në këtë shembull, do të duket si më poshtë.

import glob

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

Në vend të a.jpg, mund të merrni sa vijon, me shtimin e shtegut të argumentit.
./testdir/a.jpg

Ju gjithashtu mund të përdorni shkronja të egra (*) për të marrë vetëm shtesa specifike, siç tregohet më poshtë.
glob.glob('./testdir/*.jpg')

Mund të përdoret përputhja e modelit të mëposhtëm.

  • *: Përputhet me gjithçka.
  • ?Përputhet me çdo personazh të vetëm.
  • [abc]: Përputhet me një karakter të vetëm nga a, b ose c.
  • [!abc]: Përputhet me një karakter të vetëm përveç a, b ose c

Riemërto me os.rename()

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Riemërtoni skedarin ose drejtorinë src në dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Përdorni funksionin rename() të modulit os, i cili do ta riemërtojë atë siç sugjeron emri.

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

Më pas, a.jpg do të riemërtohet në a_000.jpg.

Gjenerimi i numrave vijues të mbushur me zero me str.format()

Për shembull, kur shtojmë numra vijues në dhjetëra skedarë, ne duam të përdorim “00” ose “11” në vend të “0” ose “1”. Nëse dëshironi të plotësoni zero në këtë mënyrë, përdorni metodën str.format().

str.format(args,*kwargs)
Kryen operacione të formatimit të vargjeve. Vargu që thërret këtë metodë mund të përmbajë karaktere normale ose fusha zëvendësimi të ndara me {}.Built-in Types — Python 3.10.0 Documentation

Sintaksa e vargjeve të specifikimit të formatit
Vargu i formatimit përmban “fushën e zëvendësimit” të mbyllur në kllapa kaçurrelë {}.

Sintaksa e fushës së zëvendësimit është si më poshtë:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

Me fjalë më të thjeshta, fusha e zëvendësimit fillon me emrin_fushë, e cila bën që vlera e objektit të specifikuar të formatohet dhe të futet në dalje në vend të fushës zëvendësuese. Pas fushës_emrit, fusha e konvertimit mund të pasohet nga një pikëçuditëse ‘! Pas fushës_emrit, fusha e konvertimit mund të pasohet nga një pikëçuditëse ‘! Format_spec mund të shkruhet me dy pika ‘:’ në fund. Kjo specifikon formatin jo të parazgjedhur të vlerës që do të zëvendësohet.
string — Common string operations — Python 3.10.0 Documentation

Nëse doni ta plotësoni me 0 për momentin, bëni sa më poshtë.

# 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

Shembull i kodit për të shtuar një varg/numër vijues përpara një skedari

Së pari, merrni emrin e skedarit me os.path.basename(). Më pas, shtoni një varg ose numër vijues përpara emrit të skedarit dhe bashkojeni atë me shtegun origjinal me os.path.join().

Shembulli i mëposhtëm shton img_ në pjesën e përparme të të gjithë emrave të skedarëve.

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

Rezultati është si më poshtë.

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

Nëse dëshironi të shtoni numra sekuencialë, ndryshoni deklaratën for në diçka si kjo: enumerate() për të marrë numrat e numëruar sipas renditjes nga 0. Në këtë rast, numri plotësohet me tre shifra.

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

Këtu është rezultati.

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

Nëse dëshironi të filloni me 1 në vend të 0, vendosni argumentin e dytë të enumerate në 1.

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

Shkon kështu.

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

Shembull i kodit për të shtuar një varg/numër vijues pas një skedari

Përdorni os.path.splitext() për të ndarë skedarin në shtegun e zgjerimit dhe rrënjës, dhe më pas shtoni vargje ose numra sekuencialë në shtegun rrënjë. Në shembullin e mëposhtëm, _img shtohet pas të gjithë emrave të skedarëve.

import os
import glob

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

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

Rezultati është ky.

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

Ashtu si me shtimin e një vargu/numri vijues përpara një skedari, ndryshoni deklaratën for kur shtoni një numër vijues.

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