- Palitan ang pangalan nang maramihan gamit ang os module at glob module.
- Kunin ang listahan ng file gamit ang glob module
- Palitan ang pangalan gamit ang os.rename()
- Bumubuo ng zero-filled sequential number na may str.format()
- Halimbawa ng code upang magdagdag ng string/sequential number bago ang isang file
- Halimbawa ng code para magdagdag ng string/sequential number pagkatapos ng file
Palitan ang pangalan nang maramihan gamit ang os module at glob module.
Gamitin ang os module at glob module upang baguhin at palitan ang pangalan ng mga pangalan ng file sa isang folder nang maramihan sa pamamagitan ng pagdaragdag ng mga string o sequential na numero bago at pagkatapos ng mga pangalan ng file.
Halimbawang istraktura ng file
Kunin ang sumusunod na istraktura ng file bilang isang halimbawa. Sa kasong ito, ipinapalagay na mayroon lamang mga file (walang mga folder) sa folder.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Mga bagay na dapat tandaan
Dahil ang proseso ay nagsasangkot ng pagpapalit ng pangalan ng file, i-save ang orihinal na file nang hiwalay upang ito ay mai-save kung sakaling mabigo.
Kunin ang listahan ng file gamit ang glob module
Hahanapin ng glob module ang lahat ng pathname na tumutugma sa tinukoy na pattern ayon sa mga panuntunang ginagamit ng Unix shell.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Halimbawa, ang sumusunod na function ay maaaring gamitin upang makakuha ng isang listahan ng mga pangalan ng file at direktoryo sa kasalukuyang direktoryo.glob.glob('./*')
Ang argument ay maaaring isang ganap na landas o isang kamag-anak na landas.
Sa halimbawang ito, magiging ganito ang hitsura nito.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Sa halip na a.jpg, maaari mong makuha ang sumusunod, na may idinagdag na landas ng argumento../testdir/a.jpg
Maaari ka ring gumamit ng mga wildcard (*) upang makakuha lamang ng mga partikular na extension, tulad ng ipinapakita sa ibaba.glob.glob('./testdir/*.jpg')
Maaaring gamitin ang sumusunod na pagtutugma ng pattern.
*
: Tugma sa lahat.?
Tumutugma sa anumang solong karakter.[abc]
: Tumutugma sa isang karakter mula sa a, b, o c.[!abc]
: Tumutugma sa isang karakter maliban sa a, b, o c
Palitan ang pangalan gamit ang os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Palitan ang pangalan ng file o direktoryo na src sa dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Gamitin ang function rename() ng os module, na papalitan ang pangalan nito gaya ng iminumungkahi ng pangalan.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Pagkatapos, ang a.jpg ay papalitan ng pangalan sa a_000.jpg.
Bumubuo ng zero-filled sequential number na may str.format()
Halimbawa, kapag nagdaragdag ng mga sequential na numero sa dose-dosenang mga file, gusto naming gamitin ang “00” o “11” sa halip na “0” o “1”. Kung gusto mong punan ang mga zero sa ganitong paraan, gamitin ang str.format() method.
str.format(args,*kwargs)
Nagsasagawa ng mga operasyon sa pag-format ng string. Ang string na humihimok sa paraang ito ay maaaring maglaman ng mga normal na character o mga patlang ng pagpapalit na pinaghihiwalay ng {}.Built-in Types — Python 3.10.0 Documentation
Syntax ng mga string ng detalye ng format
Ang string ng pag-format ay naglalaman ng “papalit na patlang” na nakapaloob sa mga kulot na bracket {}.Ang syntax ng kapalit na field ay ang mga sumusunod:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Sa mas simpleng mga termino, ang kapalit na field ay nagsisimula sa field_name, na nagiging sanhi ng halaga ng tinukoy na bagay na ma-format at maipasok sa output sa halip na sa kapalit na field. Pagkatapos ng field_name, ang patlang ng conversion ay maaaring sundan ng tandang padamdam ‘! Pagkatapos ng field_name, ang patlang ng conversion ay maaaring sundan ng tandang padamdam ‘! Ang format_spec ay maaaring isulat gamit ang isang tutuldok na ‘:’ sa dulo. Tinutukoy nito ang hindi default na format ng halagang papalitan.
string — Common string operations — Python 3.10.0 Documentation
Kung gusto mong punan ito ng 0 sa ngayon, gawin ang sumusunod.
# 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
Halimbawa ng code upang magdagdag ng string/sequential number bago ang isang file
Una, kunin ang pangalan ng file na may os.path.basename(). Pagkatapos, magdagdag ng string o sequential number sa harap ng pangalan ng file, at pagsamahin ito sa orihinal na path na may os.path.join().
Ang sumusunod na halimbawa ay nagdaragdag ng img_ sa harap ng lahat ng mga pangalan ng 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)))
Ang resulta ay ang mga sumusunod.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Kung gusto mong magdagdag ng mga sunud-sunod na numero, baguhin ang para sa pahayag sa isang bagay na tulad nito: enumerate() upang mabilang ang mga numero sa pagkakasunud-sunod mula sa 0. Sa kasong ito, ang numero ay puno ng tatlong digit.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Narito ang resulta.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Kung gusto mong magsimula sa 1 sa halip na 0, itakda ang pangalawang argumento ng enumerate sa 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Ganito iyan.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Halimbawa ng code para magdagdag ng string/sequential number pagkatapos ng file
Gamitin ang os.path.splitext() upang hatiin ang file sa extension at root path, at pagkatapos ay magdagdag ng mga string o sequential na numero sa root path. Sa sumusunod na halimbawa, idinaragdag ang _img pagkatapos ng lahat ng pangalan ng 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)
Ang resulta ay ito.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Tulad ng pagdaragdag ng string/sequential number bago ang isang file, baguhin ang for statement kapag nagdadagdag ng sequential number.
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