2017-01-25 4 views
2

Привет, У меня есть несколько разных файлов, которые нужно переименовать в другое. Я получил это далеко, но я хочу, чтобы у меня было много элементов для замены и их соответствующих замен, а не набирать каждый из них, запустите его, а затем повторно введите его снова.Сценарий Python рекурсивно переименовывает все файлы в папке и подпапках

UPDATE * Также мне нужно переименовать, чтобы изменить только часть файла, не все это так, если бы был «Cat5e_1mBend1bottom50m2mBend2top-Aqeoiu31» было бы просто изменить его на «" Cat5e50m1mBED_50m2mBE2U-Aqeoiu31"

import os, glob 

#searches for roots, directory and files 
for root,dirs, files in os.walk(r"H:\My Documents\CrossTalk\\"): 
    for f in files: 
     if f == "Cat5e_1mBend1bottom50m2mBend2top":#string you want to rename 
      try: 
      os.rename('Cat5e_1mBend1bottom50m2mBend2top', 'Cat5e50m1mBED_50m2mBE2U')) 
      except FileNotFoundError, e: 
      print(str(e)) 
+0

Какая общая замена в названии файла вы будете делать? –

ответ

3

Этот wath вы хотите?

import os, glob 
#searches for roots, directory and files 
#Path 
p=r"C:\\Users\\joao.limberger\\Documents\\Nova Pasta" 
# rename arquivo1.txt to arquivo33.txt and arquivo2.txt to arquivo44.txt 
renames={"arquivo1.txt":"arquivo33.txt","arquivo2.txt":"arquivo44.txt"} 
for root,dirs,files in os.walk(p): 
    for f in files: 
     if f in renames.keys():#string you want to rename 
     try: 
      os.rename(os.path.join(root , f), os.path.join(root , renames[f])) 
      print("Renaming ",f,"to",renames[f]) 
     except FileNotFoundError as e: 
      print(str(e)) 

Проверьте, не так ли это!

import os, glob 
#searches for roots, directory and files 
#Python 2.7 
#Path 
p=r"C:\\Users\\joao.limberger\\Documents\\Nova Pasta" 
# if the substring in the key exist in filename, replace the substring 
# from the value of the key 
# if the key is "o1" and the value is "oPrinc1" and the filename is 
# arquivo1.txt ... The filename whil be renamed to "arquivoPrinc1.txt" 
renames={"o1":"oPrinc1","oldSubs":"newSubs"} 
for root,dirs,files in os.walk(p): 
    for f in files: 
     for r in renames: 
      if r in f: 
       newFile = f.replace(r,renames[r],1) 
       try: 
        os.rename(os.path.join(root , f), os.path.join(root , newFile)) 
        print "Renaming ",f,"to",newFile 
       except FileNotFoundError , e: 
        print str(e) 
+0

'if f in renames.keys()' => 'if f в переименованиях, более pythonic, быстрее. –

+0

Нет, это не сработало, оно переименовало все файлы. Я хочу только часть переименованного файла. Мне жаль, если я вас смущаю, пожалуйста, посмотрите на обновление выше – VisualExstasy

+0

Спасибо @ Жан-ФрансуаФабр, я новый в программировании на Python !!!! –

2

Первое, что вам нужно это dictionary для замены, то небольшое изменение в коде:

import os, glob 

name_map = { 
    "Cat5e_1mBend1bottom50m2mBend2top": 'Cat5e50m1mBED_50m2mBE2U' 
} 

#searches for roots, directory and files 
for root,dirs,files in os.walk(r"H:\My Documents\CrossTalk"): 
    for f in files: 
     if f in name_map: 
      try: 
      os.rename(os.path.join(root, f), os.path.join(root, name_map[f])) 
      except FileNotFoundError, e: 
      #except FileNotFoundError as e: # python 3 
      print(str(e)) 

в name_map, то key (строка слева от «:») это имя fil e в вашей файловой системе, а value (строка справа от «:») - это имя, которое вы хотите использовать.

+1

, который не будет работать: вы должны присоединиться к директории 'root', или' rename' не удастся. –

+0

@ Jean-FrançoisFabre Эй, ты помог мне в моем последнем сценарии, получил какие-то предложения? – VisualExstasy

+0

Yep, thanks @ Jean-FrançoisFabre –

Смежные вопросы