- Omdøb i massevis ved hjælp af os-modulet og glob-modulet.
- Hent fillisten med glob-modulet
- Omdøb med os.rename()
- Generering af sekventielle numre fyldt med nul med str.format()
- Eksempel på kode til at tilføje et string\følgenummer før en fil
- Eksempel på kode til at tilføje et string\følgenummer efter en fil
Omdøb i massevis ved hjælp af os-modulet og glob-modulet.
Brug os-modulet og glob-modulet til at ændre og omdøbe filnavne i en mappe i massevis ved at tilføje strenge eller fortløbende numre før og efter filnavnene.
Eksempel på filstruktur
Tag følgende filstruktur som et eksempel. I dette tilfælde antages det, at der kun er filer (ingen mapper) i mappen.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Ting, du skal huske på
Da processen indebærer en omdøbning af filen, skal du gemme den originale fil separat, så den kan gemmes i tilfælde af fejl.
Hent fillisten med glob-modulet
Glob-modulet finder alle de stinavne, der passer til det angivne mønster i henhold til de regler, der anvendes af Unix-shell'en.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Følgende funktion kan f.eks. bruges til at få en liste over navne på filer og mapper i den aktuelle mappe.glob.glob('./*')
Argumentet kan være en absolut sti eller en relativ sti.
I dette eksempel ville det se ud som følger.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
I stedet for a.jpg kan du få følgende med tilføjelsen af argumentet sti../testdir/a.jpg
Du kan også bruge jokertegn (*) for kun at få vist bestemte filtypenavne, som vist nedenfor.glob.glob('./testdir/*.jpg')
Der kan anvendes følgende mønstermatchning.
*
: Passer til alt.?
Passer til et hvilket som helst enkelt tegn.[abc]
: Matcher et enkelt tegn fra a, b eller c.[!abc]
: Passer til et enkelt tegn ud over a, b eller c
Omdøb med os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Omdøb filen eller mappen src til dst.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Brug funktionen rename() i os-modulet, som omdøber den som navnet antyder.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Derefter vil a.jpg blive omdøbt til a_000.jpg.
Generering af sekventielle numre fyldt med nul med str.format()
Når vi f.eks. tilføjer fortløbende numre til snesevis af filer, skal vi bruge “00” eller “11” i stedet for “0” eller “1”. Hvis du ønsker at udfylde nuller på denne måde, skal du bruge metoden str.format().
str.format(args,*kwargs)
Udfører formateringsoperationer for strenge. Den streng, der påkalder denne metode, kan indeholde normale tegn eller erstatningsfelter adskilt af {}.Built-in Types — Python 3.10.0 Documentation
Syntaks for formatspecifikationsstrenge
Formateringsstrengen indeholder “erstatningsfeltet” omgivet af krøllede parenteser {}.Syntaksen for erstatningsfeltet er som følger:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
I enklere vendinger starter erstatningsfeltet med field_name, hvilket bevirker, at værdien af det angivne objekt formateres og indsættes i output i stedet for erstatningsfeltet. Efter field_name kan konverteringsfeltet efterfølges af et udråbstegn '! Efter field_name kan konverteringsfeltet efterfølges af et udråbstegn '! Format_spec kan skrives med et kolon ':' i slutningen. Dette angiver det format, der ikke er standardformatet for den værdi, der skal erstattes.
string — Common string operations — Python 3.10.0 Documentation
Hvis du ønsker at udfylde den med 0 indtil videre, skal du gøre følgende.
# 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
Eksempel på kode til at tilføje et string\følgenummer før en fil
Først skal du hente filnavnet med os.path.basename(). Derefter tilføjes en streng eller et fortløbende nummer foran filnavnet, og det sammenkædes med den oprindelige sti med os.path.join().
I det følgende eksempel tilføjes img_ foran alle filnavne.
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)))
Resultatet er som følger.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Hvis du vil tilføje fortløbende numre, skal du ændre for-angivelsen til noget i stil med dette: enumerate() for at få tallene talt i rækkefølge fra 0. I dette tilfælde er tallet fyldt med tre cifre.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Her er resultatet.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Hvis du ønsker at starte med 1 i stedet for 0, skal du sætte det andet argument i enumerate til 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Det foregår på denne måde.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Eksempel på kode til at tilføje et string\følgenummer efter en fil
Brug os.path.splitext() til at opdele filen i udvidelse og rodsti, og tilføj derefter strenge eller fortløbende numre til rodstien. I det følgende eksempel tilføjes _img efter alle filnavne.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Resultatet er følgende.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Som ved tilføjelse af et string\følgenummer før en fil skal du ændre for-angivelsen, når du tilføjer et følgenummer.
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