2015-04-26 3 views
-5

Например вот мой список папок:Переименование папки на основе их префикса имени

foldername_java, foldername_new , foldername_old, myprogram_1, mylist_2, mylist_21, mylist_22 

Я хочу переименовать эти папки на основе их годов префикс имени. Папки, начинающиеся с «имя_папки», должны быть переименованы, чтобы включить индекс 0, те, которые начинаются с «myprogram», должны быть переименованы с индексом 1, а те, которые начинаются с «mylist» с индексом 2.

Второй индекс должен увеличение для всех следующих случаев префикса, например:

mylist_2 
mylist_21 
mylist_22 

Как достичь этого?

+0

Практически все возможно практически на любом языке программирования, так что да возможно :-). Но вы просто забыли сказать, что означает * начало совпадения папок *. Означает ли это, что у них одинаковые первые n букв (и что такое n)? или начало - это все, что было до первого (или последнего) '' _''? –

+0

У меня есть другая папка в этом формате. foldername_new, поэтому папки, начинающиеся с имени как имя папки, должны отображаться как 0, а папка рядом с именем foldername_new должна отображаться как 1. и она увеличивает числовое значение. – sindhu

ответ

0

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

indexes = { 
    'foldername': 0, 
    'myprogram': 1, 
    'mylist': 2 
} 

folders = ['foldername_java', 
      'foldername_new', 
      'foldername_old', 
      'myprogram_something', 
      'mylist_new', 
      'mylist_whatever', 
      'mylist_stuff'] 

renamed_folders = [] 
for folder in folders: 
    for s in indexes: 
     if folder.startswith(s): 
      new_folder = '{}_{}'.format(s, indexes[s]) 
      previous = len(filter(lambda x: x.startswith(s), renamed_folders)) 
      if previous: 
       new_folder += str(previous) 
      renamed_folders.append(new_folder) 
      continue 

>>> print renamed_folders 
['foldername_0', 'foldername_01', 'foldername_02', 'myprogram_1', 'mylist_2', 'mylist_21', 'mylist_22'] 
+0

Вот мой список поэтому для имен папок с именем startingas acantharia acanthria_protist acanthria_protist_big acanthria_protist_halo мы должны обозначить как 0, для амфиподов (только одна папки) необходимо маркировать как 1, для папок, содержащей Withthe имени начиная с appendicularian appendicularian_s_shape appendicularian_slight_curve нам нужно обозначить как 2 и так далее. Как я могу достичь этого в python – sindhu

0

Это, безусловно, возможно, однако вы не объясняете, что именно хотите. Возможно, это поможет:

#!/usr/bin/python 

folder_list = ['foldername_java', 'foldername_new', 'foldername_old', 'myprogram_1', 'mylist_2', 'mylist_21', 'mylist_22'] 

indexes_list = [] 
arranged_list = [] 
final_list = [] 

for i in folder_list: 
    prefix, suffix = i.split('_') 
    if prefix in indexes_list: 
     arranged_list[indexes_list.index(prefix)].append(prefix) 
    else: 
     indexes_list.append(prefix) 
     arranged_list.append([]) 
     arranged_list[len(arranged_list)-1].append(prefix) 

for i in arranged_list: 
    c=0 
    for x in i: 
     c+=1 
     final_list.append(x + "_" + str(c)) 

print(final_list) 


>>> ['foldername_1', 'foldername_2', 'foldername_3', 'myprogram_1', 'mylist_1', 'mylist_2', 'mylist_3'] 
+0

, но у меня почти 100 папок с разными именами. поэтому, если запуск от имени папки соответствует мне нужно пометить как 0. например Вот мой список поэтому для имен папок с именем, начинающимся в acantharia acanthria_protist, acanthria_protist_big, acanthria_protist_halo, мы должны обозначить как 0, для амфиподов (только одна папки) необходимо маркировать как 1, для папок, содержащей Withthe имени начинаются appendicularian appendicularian_s_shape, appendicularian_slight_curve, мы должны обозначить как 2 и так далее. Как я могу достичь этого в python – sindhu

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