दिलचस्प पोस्ट
टेबल पर ताले के साथ लेनदेन अलगाव स्तर के संबंध SASS का उपयोग करते समय मैं एक अलग निर्देशिका से एक फ़ाइल कैसे आयात कर सकता हूं? विजुअल स्टूडियो 2005 पर Google सी ++ परीक्षण फ्रेमवर्क (गेटेस्ट) कैसे सेटअप करें नए Hangouts Android ऐप्लिकेशन में आशय से Google Hangout प्रारंभ करें मैं कैसे इकाई ढांचे में शून्य मूल्यों के लिए क्वेरी कर सकते हैं? वेब सेवा बनाम WCF सेवा फोर्स-निर्देशित लेआउट में नए नोड्स को जोड़ना कैसे बनाने के लिए div शेष ऊंचाई पर कब्जा? प्राकृतिक सॉर्टिंग एल्गोरिथम हम जावास्क्रिप्ट में पहचानकर्ता के रूप में तत्व आईडी का उपयोग क्यों नहीं करते हैं? डेल्फी 2010 और यूनिकोड को माइग्रेट करते समय 64-बिट के लिए भी तैयार करने के लिए मैं कैसे देखूं अगर वाई-फाई एंड्रॉइड पर कनेक्ट है? फ्लेक्सबॉक्स लेआउट में पैडिंग-नीचे / टॉप सी # में यूनिक्स टाइमस्टैम्प कैसे प्राप्त करें एंड्रॉइड प्रोग्रामैटिकली में डेटा कनेक्शन सक्षम / अक्षम करें

पायथन में एक डायरेक्टरी में कई फाइलों का नाम बदलें

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

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

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

वेब के समाधान से एकत्रित समाधान "पायथन में एक डायरेक्टरी में कई फाइलों का नाम बदलें"

किसी फ़ाइल या निर्देशिका को नाम बदलने या स्थानांतरित करने के लिए os.rename(src, dst) का उपयोग करें

 $ ls cheese_cheese_type.bar cheese_cheese_type.foo $ python >>> import os >>> for filename in os.listdir("."): ... if filename.startswith("cheese_"): ... os.rename(filename, filename[7:]) ... >>> $ ls cheese_type.bar cheese_type.foo 

आपकी नवीनतम टिप्पणी के आधार पर यहां एक स्क्रिप्ट दी गई है।

 #!/usr/bin/env python from os import rename, listdir badprefix = "cheese_" fnames = listdir('.') for fname in fnames: if fname.startswith(badprefix*2): rename(fname, fname.replace(badprefix, '', 1)) 

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

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

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

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

मेरे पास एक ही समस्या है, जहां मैं सफेद स्थान को बदलना चाहता हूं डैश में किसी भी पीडीएफ फ़ाइल में - लेकिन फाइलें कई सब-डायरेक्ट्री में थीं इसलिए, मुझे 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_', '')) 

इसे इस्तेमाल करे:

 import os import shutil for file in os.listdir(dirpath): newfile = os.path.join(dirpath, file.split("_",1)[1]) shutil.move(os.path.join(dirpath,file),newfile) 

मैं मान रहा हूं कि आप फ़ाइल एक्सटेंशन को हटाना नहीं चाहते हैं, लेकिन आप समान अवधि के साथ समान विभाजन कर सकते हैं।

इस प्रकार की सामग्री पूरी तरह से आईप्याथन के लिए उपयुक्त है, जिसमें शेल एकीकरण है।

 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_" स्ट्रिंग को निकाल देगा, जो कि पुननामक का उपयोग करेगा:

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

यहां एक अधिक सामान्य समाधान है:

यह कोड किसी विशेष वर्ण या वर्णों के सेट को एक फ़ाइल के सभी फाइलनामों से निर्देशिका में निकालने के लिए इस्तेमाल किया जा सकता है और उन्हें किसी भी अन्य वर्ण, वर्णों का सेट या कोई वर्ण नहीं बदल सकता है

 import os paths = (os.path.join(root, filename) for root, _, filenames in os.walk('C:\FolderName') for filename in filenames) for path in paths: # the '#' in the example below will be replaced by the '-' in the filenames in the directory newname = path.replace('#', '-') if newname != path: os.rename(path, newname) 

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

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

मैं मूल रूप से कुछ जीयूआई की तलाश कर रहा था जो नियमित अभिव्यक्तियों का उपयोग करने के लिए नाम बदलने की अनुमति देता था और जिसके परिणामस्वरूप परिवर्तन लागू करने से पहले परिणाम का एक पूर्वावलोकन था।

लिनक्स पर मैंने सफलतापूर्वक क्रोनमेम का इस्तेमाल किया है, विंडोज़ कमांडर पर रेगेक्स के साथ नाम बदलते हैं, लेकिन मुझे ओएसएक्स के लिए कोई अच्छी मुक्त समकक्ष नहीं मिला, इसलिए मैंने एक अजगर स्क्रिप्ट लिखकर समाप्त कर दिया, जो पुनरावर्ती रूप से काम करता है और डिफ़ॉल्ट रूप से केवल नए फ़ाइल नामों को बिना किसी प्रिंट के प्रिंट करता है परिवर्तन। वास्तव में फ़ाइल नामों को संशोधित करने के लिए '-w' स्विच जोड़ें।

 #!/usr/bin/python # -*- coding: utf-8 -*- import os import fnmatch import sys import shutil import re def usage(): print """ Usage: %s <work_dir> <search_regex> <replace_regex> [-w|--write] By default no changes are made, add '-w' or '--write' as last arg to actually rename files after you have previewed the result. """ % (os.path.basename(sys.argv[0])) def rename_files(directory, search_pattern, replace_pattern, write_changes=False): pattern_old = re.compile(search_pattern) for path, dirs, files in os.walk(os.path.abspath(directory)): for filename in fnmatch.filter(files, "*.*"): if pattern_old.findall(filename): new_name = pattern_old.sub(replace_pattern, filename) filepath_old = os.path.join(path, filename) filepath_new = os.path.join(path, new_name) if not filepath_new: print 'Replacement regex {} returns empty value! Skipping'.format(replace_pattern) continue print new_name if write_changes: shutil.move(filepath_old, filepath_new) else: print 'Name [{}] does not match search regex [{}]'.format(filename, search_pattern) if __name__ == '__main__': if len(sys.argv) < 4: usage() sys.exit(-1) work_dir = sys.argv[1] search_regex = sys.argv[2] replace_regex = sys.argv[3] write_changes = (len(sys.argv) > 4) and sys.argv[4].lower() in ['--write', '-w'] rename_files(work_dir, search_regex, replace_regex, write_changes) 

उदाहरण उपयोग केस

मैं निम्नलिखित m7-08 में एक फ़ाइल नाम के कुछ हिस्सों को फ्लिप करना चाहता हूं, यानी फ़ाइल नाम की शुरुआत के लिए बिट m7-08 को स्थानांतरित करें:

 # Before: Summary-building-mobile-apps-ionic-framework-angularjs-m7-08.mp4 # After: m7-08_Summary-building-mobile-apps-ionic-framework-angularjs.mp4 

यह एक सूखी भाग प्रदर्शन करेगा, और वास्तव में किसी भी फाइल का नाम बदलने के बिना नई फ़ाइल नाम मुद्रित करेगा:

 rename_files_regex.py . "([^\.]+?)-(m\\d+-\\d+)" "\\2_\\1" 

यह वास्तविक पुन: नामकरण करेगा (आप या तो – -w या --write उपयोग कर सकते हैं):

 rename_files_regex.py . "([^\.]+?)-(m\\d+-\\d+)" "\\2_\\1" --write 

import 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 ()

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

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

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

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