फाइल नावाच्या आधी आणि नंतर स्ट्रिंग किंवा अनुक्रमांक जोडून बॅच पायथनमध्ये फाइलचे नाव बदलते

व्यवसाय

ओएस मॉड्यूल आणि ग्लोब मॉड्यूल वापरून मोठ्या प्रमाणात नाव बदला.

फाईलच्या नावांच्या आधी आणि नंतर स्ट्रिंग किंवा अनुक्रमिक संख्या जोडून मोठ्या प्रमाणात फोल्डरमधील फाइलची नावे बदलण्यासाठी आणि पुनर्नामित करण्यासाठी os मॉड्यूल आणि ग्लोब मॉड्यूल वापरा.

उदाहरण फाइल संरचना

उदाहरण म्हणून खालील फाइल स्ट्रक्चर घ्या. या प्रकरणात, असे गृहीत धरले जाते की फोल्डरमध्ये फक्त फाइल्स (कोणतेही फोल्डर नाहीत) आहेत.

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

लक्षात ठेवण्याच्या गोष्टी

प्रक्रियेमध्ये फाइलचे नाव बदलणे समाविष्ट असल्याने, मूळ फाइल स्वतंत्रपणे जतन करा जेणेकरून अयशस्वी झाल्यास ती जतन केली जाऊ शकते.

ग्लोब मॉड्यूलसह ​​फाइल सूची मिळवा

ग्लोब मॉड्यूलमध्ये युनिक्स शेलद्वारे वापरलेल्या नियमांनुसार निर्दिष्ट पॅटर्नशी जुळणारी सर्व पथनावे सापडतील.
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

तुम्हाला क्रमवार संख्या जोडायची असल्यास, फॉर स्टेटमेंट बदलून असे काहीतरी करा: संख्या 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 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