- OS модулі мен глоб модулін пайдаланып атауды жаппай өзгертіңіз.
- glob модулімен файлдар тізімін алыңыз
- os.rename() арқылы атын өзгерту
- str.format() арқылы нөлмен толтырылған реттік сандарды құру
- Файлдың алдында жолды/реттік нөмірді қосу үшін кодтың мысалы
- Файлдан кейін жолды/реттік нөмірді қосу кодының мысалы
OS модулі мен глоб модулін пайдаланып атауды жаппай өзгертіңіз.
Файл атауларынан бұрын және кейін жолдарды немесе реттік сандарды қосу арқылы қалтадағы файл атауларын жаппай өзгерту және атын өзгерту үшін os модулін және glob модулін пайдаланыңыз.
Мысал файл құрылымы
Мысал ретінде келесі файл құрылымын алыңыз. Бұл жағдайда қалтада тек файлдар (қалталар жоқ) бар деп есептеледі.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Есте сақтау керек нәрселер
Процесс файлдың атын өзгертуді қамтитындықтан, қате болған жағдайда оны сақтауға болатын түпнұсқа файлды бөлек сақтаңыз.
glob модулімен файлдар тізімін алыңыз
Glob модулі Unix қабығы пайдаланатын ережелерге сәйкес көрсетілген үлгіге сәйкес келетін барлық жол атауларын табады.
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']
a.jpg орнына аргумент жолы қосылған келесіні алуға болады../testdir/a.jpg
Төменде көрсетілгендей тек арнайы кеңейтімдерді алу үшін қойылмалы таңбаларды (*) пайдалануға болады.glob.glob('./testdir/*.jpg')
Келесі үлгі сәйкестігін пайдалануға болады.
*
: Барлығына сәйкес келеді.?
Кез келген бір таңбаға сәйкес келеді.[abc]
: a, b немесе c аралығындағы бір таңбаға сәйкес келеді.[!abc]
: a, b немесе c-дан басқа бір таңбаға сәйкес келеді
os.rename() арқылы атын өзгерту
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Файлдың немесе каталогтың src атын dst деп өзгертіңіз.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
OS модулінің rename() функциясын пайдаланыңыз, ол оның аты айтып тұрғандай атын өзгертеді.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Содан кейін a.jpg атауы a_000.jpg болып өзгертіледі.
str.format() арқылы нөлмен толтырылған реттік сандарды құру
Мысалы, ондаған файлдарға реттік сандарды қосқанда, біз «0» немесе «1» орнына «00» немесе «11» қолданғымыз келеді. Нөлдерді осылай толтырғыңыз келсе, str.format() әдісін пайдаланыңыз.
str.format(args,*кваргс)
Жолды пішімдеу операцияларын орындайды. Бұл әдісті шақыратын жолда қалыпты таңбалар немесе {} арқылы бөлінген ауыстыру өрістері болуы мүмкін.Built-in Types — Python 3.10.0 Documentation
Пішім спецификация жолдарының синтаксисі
Пішімдеу жолында бұйра жақшаға алынған {} «алмастыру өрісі» бар.Ауыстыру өрісінің синтаксисі келесідей:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Қарапайым тілмен айтқанда, ауыстыру өрісі өріс_атаудан басталады, бұл көрсетілген нысанның мәнін пішімдеуге және ауыстыру өрісінің орнына шығысқа кірістіруге әкеледі. Өріс_атаудан кейін түрлендіру өрісінен кейін ‘! Өріс_атаудан кейін түрлендіру өрісінен кейін ‘! 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
Файлдың алдында жолды/реттік нөмірді қосу үшін кодтың мысалы
Алдымен os.path.basename() арқылы файл атауын алыңыз. Содан кейін файл атауының алдына жолды немесе реттік нөмірді қосыңыз және оны os.path.join() арқылы бастапқы жолмен байланыстырыңыз.
Келесі мысал барлық файл атауларының алдыңғы жағына img_ қосады.
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
Егер реттік сандарды қосқыңыз келсе, for операторын келесідей етіп өзгертіңіз: сандарды 0-ден бастап ретімен санау үшін enumerate() функциясын орындаңыз. Бұл жағдайда сан үш цифрмен толтырылады.
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
0 орнына 1-ден бастағыңыз келсе, санаудың екінші аргументін 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
Файлдан кейін жолды/реттік нөмірді қосу кодының мысалы
Файлды кеңейтім мен түбір жолына бөлу үшін os.path.splitext() пайдаланыңыз, содан кейін түбір жолына жолдар немесе реттік сандар қосыңыз. Келесі мысалда _img барлық файл атауларынан кейін қосылады.
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 операторын өзгертіңіз.
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