متفرق پائتھون سے فائلوں کے نام بدلنا

اکثر کسی فولڈر میں کسی موضوع سے متعلق فائلز کے شروع یا آخر میں غیر ضروری الفاظ یا حروف کا اضافہ ہو جاتا ہے جس سے انہیں پڑھنے میں دقت ہوتی ہے۔ مختصر پائتھون سکرپٹ سے اس مسئلے کو حل کیا جا سکتا ہے۔ عجلت میں لکھے گئے اس سکرپٹ کو مرحلہ وار اس دھاگے میں بہتر کیا جائے گا جس سے ابتدائی کوڈ اور پھر اس میں بہتری کے چند نکات کی تشریح بھی ہو جائے گی۔

PHP:
import os

workingDir = r'C:\MEDIA\TV\Mr.Robot.S03'

splitChar = '.'
#secondsplit = ''

# Traverse root directory, and list directories as dirs and files as files
for root, _, fileList in os.walk(workingDir):
    path = root.split(os.sep)

    for fname in fileList:
        fname, ext = os.path.splitext(fname)

        mainName = fname.split(splitChar)  # main file name
        newname = str(mainName[2]) + '_' + str(mainName[1]) + ext
        lenpath = len(path) * '..'
        print(f'{lenpath} {newname}')
 

محمداحمد

لائبریرین
السلام علیکم،

ایک تو یہ کہ mainName کے انڈیکس نمبر سمجھ نہیں آئے اور اس لائن میں ایرر ہے۔ دوسری بات یہ ہے کہ اس کوڈ میں کہیں rename فنکشن نظر نہیں آ رہا۔
 

دوست

محفلین
نیٹو فنکشن کیوں نہیں، فار لوپ میں رکھ کر چاہے اس کے ساتھ بھنگڑا ڈال لیں۔
کوڈ:
import os
os.rename(r'file path\OLD file name.file type',r'file path\NEW file name.file type')
سورس
 
السلام علیکم،

ایک تو یہ کہ mainName کے انڈیکس نمبر سمجھ نہیں آئے اور اس لائن میں ایرر ہے۔ دوسری بات یہ ہے کہ اس کوڈ میں کہیں rename فنکشن نظر نہیں آ رہا۔

یہ کوڈ اصل میں جلدی جلدی شیئر کیا تھا تاکہ ابن سعید اردو کی توجہ اس طرف مبذول کروا کر توجہ بحث سے ہٹا کر کوڈ کی طرف دلائی جا سکے۔

یہ کوڈ اصل میں مندرجہ ذیل فائلوں کی ساخت کے لیے بنایا گیا تھا۔

کوڈ:
group.MrRobot_S03.Ep01.txt
group.MrRobot_S03.Ep02.txt
group.MrRobot_S03.Ep03.txt
group.MrRobot_S03.Ep04.txt

ان فائلوں کو اگر '.' ڈاٹ حرف کی بنیاد پر توڑا جائے
PHP:
 mainName = fname.split(splitChar)

تو فائلوں کی مندرجہ ذیل لسٹیں بن جائیں گی۔

کوڈ:
['group', 'MrRobot_S03', 'Ep01']
['group', 'MrRobot_S03', 'Ep02']
['group', 'MrRobot_S03', 'Ep03']
['group', 'MrRobot_S03', 'Ep04']

اس کے بعد کی سطروں سے نئی فائل کا نام بنایا گیا ہے اورپھر اسے پرنٹ کیا گیا ہے
PHP:
newname = str(mainName[2]) + '_' + str(mainName[1]) + ext
lenpath = len(path) * '..'
print(f'{lenpath} {newname}')

اس کا نتیجہ یوں ظاہر ہو گا

کوڈ:
........ Ep01_MrRobot_S03.txt
........ Ep02_MrRobot_S03.txt
........ Ep03_MrRobot_S03.txt
........ Ep04_MrRobot_S03.txt
 
آخری تدوین:
نیٹو فنکشن کیوں نہیں، فار لوپ میں رکھ کر چاہے اس کے ساتھ بھنگڑا ڈال لیں۔
کوڈ:
import os
os.rename(r'file path\OLD file name.file type',r'file path\NEW file name.file type')
سورس

جی بالکل پائتھون کا فنکشن ہی استعمال ہو گا فائلوں کا نام بدلنے کے لیے۔ پروگرام میں پہلے صرف پرنٹ کروا کر دیکھا گیا کہ نام صحیح تبدیل ہو گیا ہے کہ نہیں۔

تسلی کے بعد یہ لائن شامل ہو گی۔
PHP:
os.rename(fname, newname)
 
کوڈ کا ابتدائی شکل شیئر کی تھی تاکہ اسے سمجھنے اور بہتر کرنے میں آسانی ہو۔ اب جدید شکل کچھ یوں ہے جسے ہم دوبارہ بتدریج آخری شکل تک مرحلہ وار بنا سکتے ہیں۔

PHP:
import os
#import tkinter as tk
#from tkinter import filedialog
from gooey import Gooey, GooeyParser

#tkroot = tk.Tk()  # Initializing Tkinter
#workingDir = filedialog.askdirectory(parent=tkroot,initialdir="/",title='Please select a directory')
#workingDir = r'F:\TV MEDIA\Dirilis Ertugrul\Season 2'
#fileList = os.listdir(workingDir)
# firstSplit = 'Module_'
# secondSplit = '_SUB'
@Gooey(program_name="Rename Files in Folder")
def renameFiles():
    parser = GooeyParser(description='Create Quarterly Marketing Report')
    parser.add_argument('data_directory',
                        action='store',
                        widget='DirChooser',
                        help="Source directory that contains files")
    parser.add_argument('FirstSplitPattern', help="First Pattern to split file Name")
    parser.add_argument('SecondSplitPattern', help="Second Pattern to split file Name")
    parser.add_argument('PrintFileName', help="Indicator for just printing the new name instead of rename file")

    args = parser.parse_args()
    workingDir = args.data_directory
    firstSplit = args.FirstSplitPattern
    secondSplit = args.SecondSplitPattern
    printNameOnly = args.PrintFileName

    # Traverse root directory, and list directories as dirs and files as files
    for root, dirs, fileList in os.walk(workingDir):
        os.chdir( root )
        path = root.split(os.sep)
        print((len(path) - 1) * '***', os.path.basename(root))
       
        for filename in fileList:
            fname, ext = os.path.splitext(filename)

            if firstSplit in fname:
                fileSplit1 = fname.split(firstSplit)[1]
                if secondSplit != '':
                    mainName = fileSplit1.split(secondSplit)[0] #main file name
                else:
                    mainName = fileSplit1
               
                newname = mainName.strip() + ext
                print(len(path) * '...', newname)
                if printNameOnly == 'YES':
                    print(newname)
                else:
                    os.rename(filename, newname)
            else:
                print(f'Could not find Characters {firstSplit} or {secondSplit} in {filename}')
if __name__ == "__main__":
    renameFiles()
 
Top