Endurnefna í lausu með því að nota OS-eininguna og glob-eininguna.
Notaðu OS-eininguna og glob-eininguna til að breyta og endurnefna skráarnöfnin í möppu í einu með því að bæta við strengjum eða raðnúmerum fyrir og á eftir skráarnöfnunum.
Dæmi um skráarskipulag
Taktu eftirfarandi skráarskipulag sem dæmi. Í þessu tilviki er gert ráð fyrir að það séu aðeins skrár (engar möppur) í möppunni.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Atriði sem þarf að hafa í huga
Þar sem ferlið felur í sér að endurnefna skrána skaltu vista upprunalegu skrána sérstaklega svo að hægt sé að vista hana ef bilun verður.
Fáðu skráalistann með glob-einingunni
Glob-einingin finnur öll slóðanöfn sem passa við tilgreint mynstur í samræmi við reglurnar sem Unix skelin notar.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Til dæmis er hægt að nota eftirfarandi aðgerð til að fá lista yfir skráar- og möppuheiti í núverandi möppu.glob.glob('./*')
Rökin geta verið alger leið eða afstæð leið.
Í þessu dæmi myndi það líta svona út.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Í staðinn fyrir a.jpg geturðu fengið eftirfarandi, með röksemdaleiðinni bætt við../testdir/a.jpg
Þú getur líka notað jokertákn (*) til að fá aðeins sérstakar viðbætur, eins og sýnt er hér að neðan.glob.glob('./testdir/*.jpg')
Hægt er að nota eftirfarandi mynstursamsvörun.
*
: Passar við allt.?
Passar við hvaða staf sem er.[abc]
: Passar við einn staf úr a, b eða c.[!abc]
: Passar við einn staf annan en a, b eða c
Endurnefna með os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Endurnefna skrána eða möppuna src í dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Notaðu aðgerðina rename() í OS-einingunni, sem mun endurnefna hana eins og nafnið gefur til kynna.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Síðan verður a.jpg breytt í a_000.jpg.
Búa til núllfylltar raðnúmer með str.format()
Til dæmis, þegar raðnúmerum er bætt við heilmikið af skrám, viljum við nota „00“ eða „11“ í stað „0“ eða „1“. Ef þú vilt fylla út núllin á þennan hátt, notaðu str.format() aðferðina.
str.format(args,*kwargs)
Framkvæmir strengjasniðsaðgerðir. Strenginn sem kallar fram þessa aðferð getur innihaldið venjulega stafi eða staðgöngureitir aðskildir með {}.Built-in Types — Python 3.10.0 Documentation
Setningafræði sniðforskriftastrengja
Sniðstrengurinn inniheldur „skiptireitinn“ innan um krullaða sviga {}.Setningafræði skiptireitsins er sem hér segir:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Í einfaldari skilmálum byrjar skiptireiturinn á field_name, sem veldur því að gildi tilgreinds hlutar er sniðið og sett inn í úttakið í stað skiptireitsins. Á eftir field_name er hægt að fylgja eftir viðskiptareitnum með upphrópunarmerki ‘! Á eftir field_name er hægt að fylgja eftir viðskiptareitnum með upphrópunarmerki ‘! Format_spec má skrifa með tvípunkti ‘:’ í lokin. Þetta tilgreinir ekki sjálfgefið snið gildisins sem á að skipta út.
string — Common string operations — Python 3.10.0 Documentation
Ef þú vilt fylla það með 0 í bili skaltu gera eftirfarandi.
# 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
Dæmi um kóða til að bæta við streng/raðnúmeri á undan skrá
Fyrst skaltu fá skráarnafnið með os.path.basename(). Bættu síðan við streng eða raðnúmeri fyrir framan skráarnafnið og tengdu það saman við upprunalegu slóðina með os.path.join().
Eftirfarandi dæmi bætir img_ við framan öll skráarnöfn.
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)))
Niðurstaðan er sem hér segir.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Ef þú vilt bæta við raðnúmerum skaltu breyta for setningunni í eitthvað á þessa leið: enumerate() til að fá tölurnar taldar í röð frá 0. Í þessu tilviki er talan fyllt með þremur tölustöfum.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Hér er niðurstaðan.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Ef þú vilt byrja á 1 í stað 0 skaltu stilla seinni röksemdafærsluna fyrir enumerate á 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Þetta gengur svona.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Dæmi um kóða til að bæta við streng/raðnúmeri á eftir skrá
Notaðu os.path.splitext() til að skipta skránni í framlengingu og rótarslóð og bættu svo strengjum eða raðnúmerum við rótarslóðina. Í eftirfarandi dæmi er _img bætt við á eftir öllum skráarnöfnum.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Niðurstaðan er þessi.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Eins og með að bæta við streng/raðnúmeri á undan skrá, breyttu for setningunni þegar þú bætir við raðnúmeri.
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