Kundi hubadilisha jina la faili katika Python kwa kuongeza kamba au nambari ya mlolongo kabla na baada ya jina la faili.

Biashara

Badilisha jina kwa wingi ukitumia moduli ya os na moduli ya globu.

Tumia moduli ya os na moduli ya globu kubadilisha na kubadilisha jina la faili katika folda kwa wingi kwa kuongeza mifuatano au nambari za mfululizo kabla na baada ya majina ya faili.

Mfano wa muundo wa faili

Chukua muundo wa faili ufuatao kama mfano. Katika kesi hii, inachukuliwa kuwa kuna faili tu (hakuna folda) kwenye folda.

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

Mambo ya kuzingatia

Kwa kuwa mchakato unahusisha kubadilisha jina la faili, hifadhi faili asili kando ili iweze kuokolewa ikiwa itashindwa.

Pata orodha ya faili na moduli ya globu

Moduli ya globu itapata njia zote zinazolingana na muundo maalum kulingana na sheria zinazotumiwa na ganda la Unix.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation

Kwa mfano, kazi ifuatayo inaweza kutumika kupata orodha ya faili na majina ya saraka katika saraka ya sasa.
glob.glob('./*')
Hoja inaweza kuwa njia kamili au njia ya jamaa.

Katika mfano huu, itaonekana kama ifuatavyo.

import glob

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

Badala ya a.jpg, unaweza kupata yafuatayo, huku njia ya hoja ikiongezwa.
./testdir/a.jpg

Unaweza pia kutumia kadi-mwitu (*) kupata viendelezi maalum tu, kama inavyoonyeshwa hapa chini.
glob.glob('./testdir/*.jpg')

Ulinganishaji wa muundo ufuatao unaweza kutumika.

  • *: Inalingana na kila kitu.
  • ?Inalingana na mhusika yeyote.
  • [abc]: Inalingana na herufi moja kutoka kwa a, b, au c.
  • [!abc]: Inalingana na herufi moja isipokuwa a, b, au c

Badili jina ukitumia os.rename()

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Badilisha jina la faili au saraka src hadi dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation

Tumia jina la kukokotoa rename() la moduli ya os, ambayo itaipa jina jipya kama jina linavyopendekeza.

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

Kisha, a.jpg itabadilishwa jina kuwa a_000.jpg.

Inazalisha nambari za mfuatano zilizojazwa sifuri na str.format()

Kwa mfano, tunapoongeza nambari za mfuatano kwenye faili nyingi, tunataka kutumia “00” au “11” badala ya “0” au “1”. Ikiwa unataka kujaza zero kwa njia hii, tumia njia ya str.format().

str.format(args,*kwargs)
Hufanya shughuli za uumbizaji wa mfuatano. Mfuatano unaoomba mbinu hii unaweza kuwa na vibambo vya kawaida au sehemu mbadala zilizotenganishwa na {}.Built-in Types — Python 3.10.0 Documentation

Sintaksia ya mifuatano ya kubainisha umbizo
Mfuatano wa uumbizaji una “uga wa uingizwaji” uliofungwa katika mabano yaliyojipinda {}.

Syntax ya uga uingizwaji ni kama ifuatavyo:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"

Kwa maneno rahisi, sehemu ya uingizwaji huanza na field_name, ambayo husababisha thamani ya kitu kilichoainishwa kufomatiwa na kuingizwa kwenye pato badala ya uga uingizwaji. Baada ya field_name, uga wa ubadilishaji unaweza kufuatiwa na alama ya mshangao ‘! Baada ya field_name, uga wa ubadilishaji unaweza kufuatiwa na alama ya mshangao ‘! Fomati_spec inaweza kuandikwa kwa koloni ‘:’ mwishoni. Hii inabainisha umbizo lisilo chaguomsingi la thamani itakayobadilishwa.
string — Common string operations — Python 3.10.0 Documentation

Ikiwa unataka kuijaza na 0 kwa sasa, fanya yafuatayo.

# 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

Mfano wa msimbo wa kuongeza mfuatano/nambari ya mfuatano kabla ya faili

Kwanza, pata jina la faili na os.path.basename(). Kisha, ongeza kamba au nambari ya mfuatano mbele ya jina la faili, na uiambatanishe na njia ya asili kwa os.path.join().

Mfano ufuatao unaongeza img_ mbele ya majina yote ya faili.

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

Matokeo yake ni kama ifuatavyo.

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

Ikiwa unataka kuongeza nambari zinazofuatana, badilisha kwa taarifa kwa kitu kama hiki: enumerate() ili nambari zihesabiwe kwa mpangilio kutoka 0. Katika kesi hii, nambari imejaa tarakimu tatu.

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

Haya hapa matokeo.

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

Ikiwa unataka kuanza na 1 badala ya 0, weka hoja ya pili ya kuhesabu hadi 1.

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

Inakwenda hivi.

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

Mfano wa msimbo wa kuongeza mfuatano/mfuatano wa nambari baada ya faili

Tumia os.path.splitext() kugawanya faili katika kiendelezi na njia ya mizizi, na kisha uongeze mifuatano au nambari za mfuatano kwenye njia ya mizizi. Katika mfano ufuatao, _img huongezwa baada ya majina yote ya faili.

import os
import glob

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

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

Matokeo yake ni haya.

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

Kama ilivyo kwa kuongeza kamba / nambari ya mfuatano kabla ya faili, badilisha kwa taarifa wakati wa kuongeza nambari ya mfuatano.

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