- Riemërtoni në masë duke përdorur modulin os dhe modulin glob.
- Merrni listën e skedarëve me modulin glob
- Riemërto me os.rename()
- Gjenerimi i numrave vijues të mbushur me zero me str.format()
- Shembull i kodit për të shtuar një varg/numër vijues përpara një skedari
- Shembull i kodit për të shtuar një varg/numër vijues pas një skedari
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