2016-06-06 9 views
0

У меня есть коллекция файлов, которые я бы хотел организовать с помощью python. Файлы имеют определенный статус штата и сохраняются в структуре папок этой формы: \ state \ year \ county \ image.jpg со многими изображениями на графство. У меня есть следующий код, который копирует и переименовывает все файлы как state_year_county_image.jpg:Переименование файлов по-умному.

import os, shutil 
path = "C:\\Users\\me\\" 
path_copies = "C:\\Users\\me\\copies\\" 
state_list = os.listdir(path) 
for state in state_list: 
    year_list = os.listdir(path+state) 
    for year in year_list: 
     county_list = os.listdir(path+state+"\\"+year) 
     for county in county_list: 
      image_list = os.listdir(path+state+"\\"+year+"\\"+county) 
      for image in image_list: 
       path_old = path+state+"\\"+year+"\\"+county+"\\"+image 
       path_new = path_copies+state+"_"+year+"_"+county+"_"+image 
       shutil.copy(path_old, path_new) 

Как я могу изменить свой файл именование режима в дальнейшем (например, от текущей state_year_county_image.jpg к year_state_county_image.jpg или в соответствии с некоторыми другой режим именования, который мне позже понадобится)? Я был бы открыт для принятия какого-либо другого соглашения об основных именованиях, если он позволяет больше гибкости, но я хотел бы, чтобы имена файлов отражали имена исходных папок.

+1

Почему вы переименовывать файлы в первую очередь? Из вашего описания я предполагаю, что у вас действительно много изображений, их размещение в одной папке затруднит поиск файлов. Пока неясно, какая часть имени файла - это состояние, графство, год и т. Д., Нет проблем с последующим переименованием. Вы также должны рассмотреть использование программного обеспечения для управления фотографиями, где вы можете назначить метки изображениям. – Pyfisch

ответ

0

os.walk может быть тем, что вы ищете. Кроме того, я бы рекомендовал не перемещать ваши изображения внутри вашего каталога поиска, так как это приведет к путанице при повторной обработке.

Что-то вроде этого:

import os 
import shutil 

SRCDIR = r'C:\Users\me\originals' 
DESTDIR = r'C:\Users\me\copies' 

for dirname, dirs, files in os.walk(SRCDIR): 
    dname = dirname.replace(os.path.sep, '_') 
    for file in files: 
     shutil.copy(file, os.path.join(DESTDIR, 
             "{}_{}".format(dname, file))