Групна промена имена датотеке у Питхон-у додавањем стринга или узастопног броја пре и после назива датотеке

Бусинесс

Преименујте масовно користећи ос модул и глоб модул.

Користите ос модул и глоб модул да бисте променили и преименовали називе датотека у фасцикли масовно додавањем низова или узастопних бројева пре и после имена датотека.

Пример структуре датотеке

Узмите следећу структуру датотеке као пример. У овом случају, претпоставља се да постоје само датотеке (нема фасцикли) у фасцикли.

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

Ствари које треба имати на уму

Пошто процес укључује преименовање датотеке, сачувајте оригиналну датотеку одвојено како би се могла сачувати у случају неуспеха.

Преузмите листу датотека са глоб модулом

Модул глоб ће пронаћи све путање које одговарају наведеном шаблону у складу са правилима која користи Уник шкољка.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation

На пример, следећа функција се може користити за добијање листе имена датотека и директоријума у ​​тренутном директоријуму.
glob.glob('./*')
Аргумент може бити апсолутна или релативна путања.

У овом примеру би то изгледало овако.

import glob

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

Уместо а.јпг, можете добити следеће, са додатком путање аргумента.
./testdir/a.jpg

Такође можете да користите замене (*) да бисте добили само одређена проширења, као што је приказано у наставку.
glob.glob('./testdir/*.jpg')

Може се користити следеће подударање шаблона.

  • *: Одговара свему.
  • ?Одговара било ком појединачном знаку.
  • [abc]: Поклапа се са једним знаком из а, б или ц.
  • [!abc]: Одговара само једном знаку осим а, б или ц

Преименуј помоћу ос.ренаме()

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Преименујте датотеку или директоријум срц у дст.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Користите функцију ренаме() ос модула, која ће га преименовати као што име сугерише.

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

Затим ће а.јпг бити преименован у а_000.јпг.

Генерисање секвенцијалних бројева попуњених нулом помоћу стр.формат()

На пример, када додајемо секвенцијалне бројеве на десетине датотека, желимо да користимо „00“ или „11“ уместо „0“ или „1“. Ако желите да попуните нуле на овај начин, користите метод стр.формат().

str.format(args,*кваргс)
Изводи операције форматирања стрингова. Стринг који позива овај метод може да садржи нормалне знакове или поља за замену раздвојена са {}.Built-in Types — Python 3.10.0 Documentation

Синтакса стрингова спецификације формата
Стринг за форматирање садржи „поље за замену“ затворено у витичасте заграде {}.

Синтакса поља за замену је следећа:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

Једноставније речено, поље за замену почиње са фиелд_наме, што доводи до тога да се вредност наведеног објекта форматира и убаци у излаз уместо поља за замену. После поља_наме, поље за конверзију може бити праћено знаком узвика ‘! После поља_наме, поље за конверзију може бити праћено знаком узвика ‘! Формат_спец се може написати са двотачком ‘:’ на крају. Ово специфицира неподразумевани формат вредности која се замењује.
string — Common string operations — Python 3.10.0 Documentation

Ако за сада желите да га попуните са 0, урадите следеће.

# 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

Пример кода за додавање стринга/редног броја пре датотеке

Прво узмите име датотеке помоћу ос.патх.басенаме(). Затим додајте стринг или секвенцијални број испред имена датотеке и повежите га са оригиналном путањом помоћу ос.патх.јоин().

Следећи пример додаје имг_ на почетак свих имена датотека.

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

Резултат је следећи.

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

Ако желите да додате секвенцијалне бројеве, промените израз фор у нешто овако: енумерате() да бисте добили бројеве који се броје по редоследу од 0. У овом случају, број је попуњен са три цифре.

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

Ево резултата.

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

Ако желите да почнете са 1 уместо 0, поставите други аргумент енумерате на 1.

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

Иде овако.

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

Пример кода за додавање стринга/редног броја после датотеке

Користите ос.патх.сплитект() да бисте поделили датотеку на екстензију и корен путању, а затим додајте низове или секвенцијалне бројеве у корен путању. У следећем примеру, _имг се додаје иза свих имена датотека.

import os
import glob

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

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

Резултат је ово.

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

Као и код додавања стринга/редног броја пре датотеке, промените наредбу фор када додајете секвенцијални број.

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