- Namakan semula secara pukal menggunakan modul os dan modul glob.
- Dapatkan senarai fail dengan modul glob
- Namakan semula dengan os.rename()
- Menjana nombor jujukan yang diisi sifar dengan str.format()
- Contoh kod untuk menambah rentetan/nombor berurutan sebelum fail
- Contoh kod untuk menambah rentetan/nombor berurutan selepas fail
Namakan semula secara pukal menggunakan modul os dan modul glob.
Gunakan modul os dan modul glob untuk menukar dan menamakan semula nama fail dalam folder secara pukal dengan menambah rentetan atau nombor berjujukan sebelum dan selepas nama fail.
Contoh struktur fail
Ambil struktur fail berikut sebagai contoh. Dalam kes ini, diandaikan bahawa terdapat hanya fail (tiada folder) dalam folder.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Perkara yang perlu diingat
Memandangkan proses itu melibatkan penamaan semula fail, simpan fail asal secara berasingan supaya ia boleh disimpan sekiranya berlaku kegagalan.
Dapatkan senarai fail dengan modul glob
Modul glob akan mencari semua nama laluan yang sepadan dengan corak yang ditentukan mengikut peraturan yang digunakan oleh cangkerang Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Sebagai contoh, fungsi berikut boleh digunakan untuk mendapatkan senarai fail dan nama direktori dalam direktori semasa.glob.glob('./*')
Hujah boleh menjadi laluan mutlak atau laluan relatif.
Dalam contoh ini, ia akan kelihatan seperti berikut.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Daripada a.jpg, anda boleh mendapatkan yang berikut, dengan laluan hujah ditambah../testdir/a.jpg
Anda juga boleh menggunakan kad bebas (*) untuk mendapatkan sambungan khusus sahaja, seperti yang ditunjukkan di bawah.glob.glob('./testdir/*.jpg')
Padanan corak berikut boleh digunakan.
*
: Padan dengan segala-galanya.?
Padan dengan mana-mana watak tunggal.[abc]
: Memadankan satu aksara daripada a, b atau c.[!abc]
: Memadankan satu aksara selain daripada a, b atau c
Namakan semula dengan os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Namakan semula fail atau direktori src kepada dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Gunakan fungsi rename() modul os, yang akan menamakan semula seperti namanya.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Kemudian, a.jpg akan dinamakan semula kepada a_000.jpg.
Menjana nombor jujukan yang diisi sifar dengan str.format()
Sebagai contoh, apabila menambah nombor berjujukan pada berpuluh-puluh fail, kami mahu menggunakan “00” atau “11” dan bukannya “0” atau “1”. Jika anda ingin mengisi sifar dengan cara ini, gunakan kaedah str.format().
str.format(args,*kwargs)
Melakukan operasi pemformatan rentetan. Rentetan yang menggunakan kaedah ini boleh mengandungi aksara biasa atau medan penggantian yang dipisahkan oleh {}.Built-in Types — Python 3.10.0 Documentation
Sintaks rentetan spesifikasi format
Rentetan pemformatan mengandungi “medan penggantian” yang disertakan dalam kurungan kerinting {}.Sintaks medan gantian adalah seperti berikut:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Dalam istilah yang lebih mudah, medan gantian bermula dengan field_name, yang menyebabkan nilai objek yang ditentukan diformatkan dan dimasukkan ke dalam output dan bukannya medan gantian. Selepas field_name, medan penukaran boleh diikuti dengan tanda seru ‘! Selepas field_name, medan penukaran boleh diikuti dengan tanda seru ‘! Format_spec boleh ditulis dengan titik bertindih ‘:’ di hujungnya. Ini menentukan format bukan lalai bagi nilai yang akan diganti.
string — Common string operations — Python 3.10.0 Documentation
Jika anda ingin mengisinya dengan 0 buat masa ini, lakukan perkara berikut.
# 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
Contoh kod untuk menambah rentetan/nombor berurutan sebelum fail
Mula-mula, dapatkan nama fail dengan os.path.basename(). Kemudian, tambahkan rentetan atau nombor berjujukan di hadapan nama fail dan gabungkannya dengan laluan asal dengan os.path.join().
Contoh berikut menambah img_ ke hadapan semua nama fail.
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)))
Hasilnya adalah seperti berikut.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Jika anda ingin menambah nombor berjujukan, tukar pernyataan for kepada sesuatu seperti ini: enumerate() untuk mendapatkan nombor dikira mengikut tertib daripada 0. Dalam kes ini, nombor itu diisi dengan tiga digit.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Inilah hasilnya.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Jika anda ingin bermula dengan 1 dan bukannya 0, tetapkan hujah kedua untuk menghitung kepada 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Ia berjalan seperti ini.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Contoh kod untuk menambah rentetan/nombor berurutan selepas fail
Gunakan os.path.splitext() untuk membahagikan fail kepada sambungan dan laluan akar, kemudian tambah rentetan atau nombor berjujukan pada laluan akar. Dalam contoh berikut, _img ditambah selepas semua nama fail.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Hasilnya begini.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Seperti menambahkan rentetan/nombor berjujukan sebelum fail, tukar penyataan for apabila menambah nombor berjujukan.
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