2016-07-09 3 views
0

У меня есть набор файлов:Python: Как группировать файлы префикс

a_a_a_morestuff 
a_a_a_morestuff 
a_a_b_morestuff 
a_a_b_morestuff 
a_a_c_morestuff 
a_b_b_morestuff 
a_b_b_morestuff 

Как я могу использовать питон перебрать их и манипулировать кластеры файлов, которые имеют один и тот же префикс т.е., a_a_a? Я не буду заранее знать, сколько файлов у меня есть или сколько у меня будет одного и того же префикса.

ответ

1

Использование glob

import glob 
print glob.glob('my_directory/a_a_a*') 

выход ниже, где my_directory содержит много файлов, в том числе a_a_a_X где X является 1-4.

['my_directory/a_a_a_3', 'my_directory/a_a_a_2', 'my_directory/a_a_a_1', 'my_directory/a_a_a_4'] 


Edit: Если вы не ориентируетесь на конкретный префикс, но знать формат префикса, вы можете использовать этот код:

import os 
import re 

files = os.listdir("somedirectory") 

prefixes = {} 

for f in files: 
    m = re.search('[^_]+_[^_]+_[^_]+_', f) 
    if m: 
     prefix = m.group(0) 
     print prefix 
     if prefix in prefixes: 
      prefixes[prefix].append(f) 
     else: 
      prefixes[prefix] = [f] 

for prefix in prefixes: 
    print prefixes[prefix] 

Для случая, когда файлы является следующий массив :

files = [ 
    'out-15.03_.03_12.57_001.h5', 
    'out-15.03_.03_25.05_001.h5', 
    'out-15.03_.03_25.05_002.h5', 
    'out-15.03_.03_25.05_003.h5', 
    'out-15.03_.03_37.52_001.h5' ] 

Это выход:

['out-15.03_.03_12.57_001.h5'] 
['out-15.03_.03_25.05_001.h5', 'out-15.03_.03_25.05_002.h5', 'out-15.03_.03_25.05_003.h5'] 
['out-15.03_.03_37.52_001.h5'] 
+0

Есть сотни неизвестных комбинаций префиксов. Любой метод, который требует от меня поиска определенного префикса, кажется неэффективным. – astromonerd

+0

Для пояснения, 'a_a_a_1' и' a_a_a_2' делят префикс 'a_a_a_'. Например, они также используют префикс 'a_a_' с' a_a_b_1'. Вы хотите сгруппировать все файлы с помощью 6-символьного префикса или любого соответствующего префикса? – Alden

+0

Я добавил код для более общего случая. Сообщите мне, если это не то, что вы ищете. – Alden

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