python - पायथन में निर्देशिका में एकाधिक फ़ाइलों का नाम बदलें




file-io file-rename (10)

इस प्रश्न का उत्तर यहां दिया गया है:

मैं पाइथन का उपयोग कर निर्देशिका में कुछ फ़ाइलों का नाम बदलने की कोशिश कर रहा हूं।

मान लें कि मेरे पास CHEESE_CHEESE_TYPE.*** नामक एक फ़ाइल है CHEESE_CHEESE_TYPE.*** और CHEESE_ को हटाना चाहते हैं, इसलिए मेरा परिणामी फ़ाइल नाम CHEESE_TYPE होगा

मैं os.path.split का उपयोग करने की कोशिश कर रहा हूं लेकिन यह ठीक से काम नहीं कर रहा है। मैंने स्ट्रिंग मैनिप्लेशंस का उपयोग करने पर भी विचार किया है, लेकिन इसके साथ भी सफल नहीं हुआ है।


इस बारे में क्या :

import re
p = re.compile(r'_')
p.split(filename, 1) #where filename is CHEESE_CHEESE_TYPE.***

आप सादगी के लिए os.system फ़ंक्शन का उपयोग कर सकते हैं और कार्य को पूरा करने के लिए बैश का आह्वान कर सकते हैं:

import os
os.system('mv old_filename new_filename')

आयात os आयात स्ट्रिंग def rename_files ():

#List all files in the directory
file_list = os.listdir("/Users/tedfuller/Desktop/prank/")
print(file_list)

#Change current working directory and print out it's location
working_location = os.chdir("/Users/tedfuller/Desktop/prank/")
working_location = os.getcwd()
print(working_location)

#Rename all the files in that directory
for file_name in file_list:
    os.rename(file_name, file_name.translate(str.maketrans("","",string.digits)))

rename_files ()


इस तरह की चीजें पूरी तरह से आईपीथॉन के लिए फिट होती हैं, जिसमें खोल एकीकरण होता है।

In [1] files = !ls
In [2] for f in files:
           newname = process_filename(f)
           mv $f $newname

नोट: इसे किसी स्क्रिप्ट में संग्रहीत करने के लिए, .ipy एक्सटेंशन का उपयोग करें, और सभी शेल कमांड को उपसर्ग करें !

यह भी देखें: http://ipython.org/ipython-doc/stable/interactive/shell.html


ऐसा लगता है कि आपकी समस्या का नाम बदलने के बजाए नया फ़ाइल नाम निर्धारित करने में अधिक समस्या है (जिसके लिए आप os.rename विधि का उपयोग कर सकते हैं)।

यह आपके प्रश्न से स्पष्ट नहीं है कि पैटर्न क्या है कि आप नामकरण करना चाहते हैं। स्ट्रिंग हेरफेर के साथ कुछ भी गलत नहीं है। एक नियमित अभिव्यक्ति हो सकती है जो आपको यहां चाहिए।


निम्नलिखित कोड काम करना चाहिए। यह प्रत्येक फ़ाइल नाम को वर्तमान निर्देशिका में लेता है, अगर फ़ाइल नाम में CHEESE_CHEESE_ पैटर्न CHEESE_CHEESE_ तो इसका नाम बदल दिया जाता है। अगर फ़ाइल नाम के लिए कुछ भी नहीं किया जाता है।

import os
for fileName in os.listdir("."):
    os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))

मान लीजिए कि आप पहले ही निर्देशिका में हैं, और आपकी टिप्पणी से "पहले 8 वर्ण" हमेशा सत्य रहते हैं। (हालांकि "CHEESE_" 7 वर्ण है ...? यदि हां, तो नीचे 8 को 7 में बदलें)

from glob import glob
from os import rename
for fname in glob('*.prj'):
    rename(fname, fname[8:])

मेरे पास एक ही समस्या है, जहां मैं सफेद जगह को बदलना चाहता हूं किसी भी पीडीएफ फ़ाइल में एक डैश में - । लेकिन फाइलें कई उप-निर्देशिकाओं में थीं। तो, मुझे os.walk() का उपयोग करना पड़ा। एकाधिक उप-निर्देशिकाओं के लिए आपके मामले में, यह ऐसा कुछ हो सकता है:

import os
for dpath, dnames, fnames in os.walk('/path/to/directory'):
    for f in fnames:
        os.chdir(dpath)
        if f.startswith('cheese_'):
            os.rename(f, f.replace('cheese_', ''))

यह आदेश पुनर्नवीनीकरण का उपयोग करते हुए, वर्तमान निर्देशिका में सभी फ़ाइलों से आरंभिक "CHEESE_" स्ट्रिंग को हटा देगा:

$ renamer --regex --find "^CHEESE_" *

यह मेरे लिए काम करता है।

import os
for afile in os.listdir('.'):
    filename, file_extension = os.path.splitext(afile)
    if not file_extension == '.xyz':
        os.rename(afile, filename + '.abc')




file-rename