Fayl adından əvvəl və sonra sətir və ya ardıcıl nömrə əlavə etməklə Python-da fayl adını toplu şəkildə dəyişdirin

Biznes

OS modulu və glob modulundan istifadə edərək toplu olaraq adını dəyişdirin.

Fayl adlarından əvvəl və sonra sətirlər və ya ardıcıl nömrələr əlavə etməklə qovluqdakı fayl adlarını kütləvi şəkildə dəyişdirmək və adını dəyişmək üçün OS modulu və glob modulundan istifadə edin.

Nümunə fayl strukturu

Nümunə olaraq aşağıdakı fayl strukturunu götürün. Bu halda, qovluqda yalnız faylların (qovluqların olmadığı) olduğu güman edilir.

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

Nəzərə almaq lazım olanlar

Proses faylın adının dəyişdirilməsini nəzərdə tutduğundan, uğursuzluq halında onu saxlamaq üçün orijinal faylı ayrıca saxlayın.

Glob modulu ilə fayl siyahısını əldə edin

Qlob modulu Unix qabığının istifadə etdiyi qaydalara uyğun olaraq göstərilən nümunəyə uyğun gələn bütün yol adlarını tapacaq.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation

Məsələn, cari kataloqda fayl və kataloq adlarının siyahısını əldə etmək üçün aşağıdakı funksiyadan istifadə etmək olar.
glob.glob('./*')
Arqument mütləq yol və ya nisbi yol ola bilər.

Bu nümunədə aşağıdakı kimi görünəcək.

import glob

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

a.jpg əvəzinə arqument yolu əlavə etməklə aşağıdakıları əldə edə bilərsiniz.
./testdir/a.jpg

Siz həmçinin aşağıda göstərildiyi kimi yalnız xüsusi uzantıları əldə etmək üçün joker işarələrdən (*) istifadə edə bilərsiniz.
glob.glob('./testdir/*.jpg')

Aşağıdakı nümunə uyğunluğu istifadə edilə bilər.

  • *: Hər şeyə uyğundur.
  • ?İstənilən tək xarakterə uyğun gəlir.
  • [abc]: a, b və ya c simvolundan bir simvola uyğun gəlir.
  • [!abc]: a, b və ya c simvolundan başqa bir simvola uyğun gəlir

os.rename() ilə adını dəyişdirin

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Faylın və ya qovluğun src adını dst olaraq dəyişdirin.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Os modulunun rename() funksiyasından istifadə edin ki, bu da adından göründüyü kimi adını dəyişdirəcək.

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

Sonra a.jpg adı a_000.jpg olaraq dəyişdiriləcək.

str.format() ilə sıfır doldurulmuş ardıcıl nömrələrin yaradılması

Məsələn, onlarla fayla ardıcıl nömrələr əlavə edərkən “0” və ya “1” əvəzinə “00” və ya “11” istifadə etmək istəyirik. Sıfırları bu şəkildə doldurmaq istəyirsinizsə, str.format() metodundan istifadə edin.

str.format(args,*kvarqlar)
Simli formatlaşdırma əməliyyatlarını yerinə yetirir. Bu metodu çağıran sətirdə normal simvollar və ya {} ilə ayrılmış əvəzetmə sahələri ola bilər.Built-in Types — Python 3.10.0 Documentation

Format spesifikasiyası sətirlərinin sintaksisi
Formatlama sətirində qıvrımlı mötərizədə {} alınmış “əvəzetmə sahəsi” var.

Əvəzetmə sahəsinin sintaksisi aşağıdakı kimidir:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

Daha sadə dillə desək, dəyişdirmə sahəsi sahə_adı ilə başlayır, bu, göstərilən obyektin dəyərinin formatlanmasına və əvəzetmə sahəsinin əvəzinə çıxışa daxil edilməsinə səbəb olur. Sahənin_adından sonra, çevrilmə sahəsindən sonra nida işarəsi ‘! Sahənin_adından sonra, çevrilmə sahəsindən sonra nida işarəsi ‘! Format_spec sonunda iki nöqtə ‘:’ işarəsi ilə yazıla bilər. Bu, əvəz olunacaq dəyərin standart olmayan formatını müəyyən edir.
string — Common string operations — Python 3.10.0 Documentation

Hələlik onu 0 ilə doldurmaq istəyirsinizsə, aşağıdakıları edin.

# 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

Fayldan əvvəl sətir/ardıcıl nömrə əlavə etmək üçün kod nümunəsi

Əvvəlcə os.path.basename() ilə fayl adını əldə edin. Sonra fayl adının qarşısına sətir və ya ardıcıl nömrə əlavə edin və onu os.path.join() ilə orijinal yol ilə birləşdirin.

Aşağıdakı nümunə bütün fayl adlarının önünə img_ əlavə edir.

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

Nəticə aşağıdakı kimidir.

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

Ardıcıl nömrələr əlavə etmək istəyirsinizsə, for ifadəsini bu kimi bir şeyə dəyişdirin: nömrələri 0-dan sıra ilə hesablamaq üçün enumerate() edin. Bu halda, nömrə üç rəqəmlə doldurulur.

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

Nəticə budur.

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

Əgər 0 əvəzinə 1 ilə başlamaq istəyirsinizsə, sadalamağın ikinci arqumentini 1-ə təyin edin.

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

Bu belə gedir.

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

Fayldan sonra sətir/ardıcıl nömrə əlavə etmək üçün kod nümunəsi

Faylı genişləndirmə və kök yola bölmək üçün os.path.splitext() istifadə edin və sonra kök yola sətirlər və ya ardıcıl nömrələr əlavə edin. Aşağıdakı misalda bütün fayl adlarından sonra _img əlavə olunur.

import os
import glob

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

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

Nəticə belədir.

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

Fayldan əvvəl sətir/ardıcıl nömrə əlavə edərkən olduğu kimi, ardıcıl nömrə əlavə edərkən for ifadəsini dəyişdirin.

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