ប្តូរឈ្មោះជាដុំដោយប្រើម៉ូឌុល os និង glob module ។
ប្រើម៉ូឌុល os និង glob module ដើម្បីផ្លាស់ប្តូរ និងប្តូរឈ្មោះឯកសារក្នុង folder ជាច្រើនដោយបន្ថែមខ្សែអក្សរ ឬលេខបន្តបន្ទាប់គ្នាមុន និងក្រោយឈ្មោះឯកសារ។
ឧទាហរណ៍រចនាសម្ព័ន្ធឯកសារ
យករចនាសម្ព័ន្ធឯកសារខាងក្រោមជាឧទាហរណ៍។ ក្នុងករណីនេះវាត្រូវបានសន្មត់ថាមានតែឯកសារ (គ្មានថត) នៅក្នុងថត។
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
អ្វីដែលត្រូវចងចាំ
ដោយសារដំណើរការពាក់ព័ន្ធនឹងការប្តូរឈ្មោះឯកសារ សូមរក្សាទុកឯកសារដើមដោយឡែកពីគ្នា ដើម្បីឱ្យវាត្រូវបានរក្សាទុកក្នុងករណីបរាជ័យ។
ទទួលបានបញ្ជីឯកសារជាមួយម៉ូឌុល glob
ម៉ូឌុល glob នឹងស្វែងរកឈ្មោះផ្លូវទាំងអស់ដែលត្រូវគ្នានឹងលំនាំដែលបានបញ្ជាក់ដោយយោងទៅតាមច្បាប់ដែលប្រើដោយសែលយូនីក។
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 ដែលនឹងប្តូរឈ្មោះវាដូចឈ្មោះដែលបានណែនាំ។
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
បន្ទាប់មក a.jpg នឹងត្រូវប្តូរឈ្មោះទៅជា a_000.jpg។
បង្កើតលេខបន្តបន្ទាប់ដែលបំពេញសូន្យជាមួយ str.format()
ជាឧទាហរណ៍ នៅពេលបន្ថែមលេខបន្តបន្ទាប់គ្នាទៅក្នុងឯកសាររាប់សិប យើងចង់ប្រើ “00” ឬ “11” ជំនួសឱ្យ “0” ឬ “1” ។ ប្រសិនបើអ្នកចង់បំពេញលេខសូន្យតាមវិធីនេះ សូមប្រើវិធីសាស្ត្រ str.format()។
str.format(args,* ក្អែក)
អនុវត្តប្រតិបត្តិការទម្រង់ខ្សែអក្សរ។ ខ្សែអក្សរដែលហៅវិធីសាស្ត្រនេះអាចមានតួអក្សរធម្មតា ឬវាលជំនួសដែលបំបែកដោយ {} ។Built-in Types — Python 3.10.0 Documentation
វាក្យសម្ព័ន្ធនៃខ្សែអក្សរបញ្ជាក់ទម្រង់
ខ្សែអក្សរធ្វើទ្រង់ទ្រាយមាន “វាលជំនួស” ដែលរុំព័ទ្ធក្នុងតង្កៀបអង្កាញ់ {} ។វាក្យសម្ព័ន្ធនៃវាលជំនួសមានដូចខាងក្រោម៖
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
នៅក្នុងពាក្យសាមញ្ញ វាលជំនួសចាប់ផ្តើមដោយ field_name ដែលបណ្តាលឱ្យតម្លៃនៃវត្ថុដែលបានបញ្ជាក់ត្រូវបានធ្វើទ្រង់ទ្រាយ និងបញ្ចូលទៅក្នុងលទ្ធផលជំនួសឱ្យវាលជំនួស។ បន្ទាប់ពីឈ្មោះ field_name វាលបំប្លែងអាចត្រូវបានតាមដោយសញ្ញាឧទាន ‘! បន្ទាប់ពីឈ្មោះ field_name វាលបំប្លែងអាចត្រូវបានតាមដោយសញ្ញាឧទាន ‘! 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 statement ទៅអ្វីមួយដូចនេះ៖ enumerate() ដើម្បីទទួលបានលេខដែលរាប់តាមលំដាប់ពី 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
ឧទាហរណ៍នៃកូដដើម្បីបន្ថែមខ្សែអក្សរ/លេខបន្តបន្ទាប់បន្ទាប់ពីឯកសារមួយ។
ប្រើ 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 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