- İşletim sistemi modülünü ve glob modülünü kullanarak toplu olarak yeniden adlandırın.
- Glob modülü ile dosya listesini alın
- os.rename() ile yeniden adlandırın
- str.format() ile sıfır doldurulmuş sıralı sayılar oluşturma
- Bir dosyadan önce bir dize/sıralı sayı eklemek için kod örneği
- Bir dosyadan sonra bir dize/sıralı sayı eklemek için kod örneği
İşletim sistemi modülünü ve glob modülünü kullanarak toplu olarak yeniden adlandırın.
Dosya adlarından önce ve sonra dizeler veya sıralı sayılar ekleyerek bir klasördeki dosya adlarını toplu olarak değiştirmek ve yeniden adlandırmak için os modülünü ve glob modülünü kullanın.
Örnek dosya yapısı
Örnek olarak aşağıdaki dosya yapısını alın. Bu durumda, klasörde yalnızca dosya (klasör yok) olduğu varsayılır.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Akılda tutulması gerekenler
İşlem, dosyanın yeniden adlandırılmasını içerdiğinden, hata durumunda kaydedilebilmesi için orijinal dosyayı ayrı olarak kaydedin.
Glob modülü ile dosya listesini alın
Glob modülü, Unix kabuğu tarafından kullanılan kurallara göre belirtilen kalıpla eşleşen tüm yol adlarını bulacaktır.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Örneğin, geçerli dizindeki dosya ve dizin adlarının bir listesini almak için aşağıdaki işlev kullanılabilir.glob.glob('./*')
Argüman, mutlak bir yol veya göreli bir yol olabilir.
Bu örnekte, aşağıdaki gibi görünecektir.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
a.jpg yerine, argüman yolu eklenmiş olarak aşağıdakini elde edebilirsiniz../testdir/a.jpg
Aşağıda gösterildiği gibi, yalnızca belirli uzantıları almak için joker karakterler (*) de kullanabilirsiniz.glob.glob('./testdir/*.jpg')
Aşağıdaki desen eşleştirme kullanılabilir.
*
: Her şeyle eşleşir.?
Herhangi bir tek karakterle eşleşir.[abc]
: a, b veya c’den tek bir karakterle eşleşir.[!abc]
: a, b veya c dışında tek bir karakterle eşleşir
os.rename() ile yeniden adlandırın
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Dosyayı veya dizini src olarak dst olarak yeniden adlandırın.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Adından da anlaşılacağı gibi onu yeniden adlandıracak olan os modülünün rename() işlevini kullanın.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Ardından, a.jpg, a_000.jpg olarak yeniden adlandırılacaktır.
str.format() ile sıfır doldurulmuş sıralı sayılar oluşturma
Örneğin onlarca dosyaya sıralı sayılar eklerken “0” veya “1” yerine “00” veya “11” kullanmak istiyoruz. Sıfırları bu şekilde doldurmak istiyorsanız str.format() yöntemini kullanın.
str.format(args,*kwarglar)
Dize biçimlendirme işlemlerini gerçekleştirir. Bu yöntemi çağıran dize, {} ile ayrılmış normal karakterler veya ikame alanları içerebilir.Built-in Types — Python 3.10.0 Documentation
Biçim belirtimi dizelerinin sözdizimi
Biçimlendirme dizesi, küme parantezleri {} içine alınmış “değiştirme alanı” içerir.Değiştirme alanının sözdizimi aşağıdaki gibidir:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Daha basit bir ifadeyle, değiştirme alanı, belirtilen nesnenin değerinin biçimlendirilmesine ve değiştirme alanı yerine çıktıya eklenmesine neden olan alan_adı ile başlar. Alan_adı’ndan sonra, dönüştürme alanını bir ünlem işareti ‘! Alan_adı’ndan sonra, dönüştürme alanını bir ünlem işareti ‘! format_spec, sonunda iki nokta üst üste ‘:’ ile yazılabilir. Bu, değiştirilecek değerin varsayılan olmayan biçimini belirtir.
string — Common string operations — Python 3.10.0 Documentation
Şimdilik 0 ile doldurmak istiyorsanız aşağıdakileri yapın.
# 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
Bir dosyadan önce bir dize/sıralı sayı eklemek için kod örneği
İlk önce, os.path.basename() ile dosya adını alın. Ardından, dosya adının önüne bir dize veya sıra numarası ekleyin ve os.path.join() ile orijinal yolla birleştirin.
Aşağıdaki örnek, tüm dosya adlarının önüne img_ ekler.
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)))
Sonuç aşağıdaki gibidir.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Sıralı sayılar eklemek istiyorsanız, 0’dan itibaren sayılan sayıları almak için for deyimini şuna benzer bir şekilde değiştirin: enumerate(). Bu durumda, sayı üç basamakla doldurulur.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
İşte sonuç.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
0 yerine 1 ile başlamak istiyorsanız, numaralandırmanın ikinci argümanını 1 olarak ayarlayın.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Bu böyle devam ediyor.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Bir dosyadan sonra bir dize/sıralı sayı eklemek için kod örneği
Dosyayı uzantı ve kök yoluna bölmek için os.path.spltext() kullanın ve ardından kök yoluna dizeler veya sıralı sayılar ekleyin. Aşağıdaki örnekte, tüm dosya adlarından sonra _img eklenir.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Sonuç bu.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Bir dosyadan önce bir dize/sıralı numara eklerken olduğu gibi, sıralı bir sayı eklerken for ifadesini değiştirin.
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