2016-06-06 3 views
0

Так из предыдущего поста, который я спросил я нашел следующий код для работы:Возврат только определенное имя файла без расширения

b = os.walk('C:\\Users\\USER\\Desktop\\FOLDER') 
f = [] 
for(dirpath, dirnames, filenames) in b: 
    f.extend(os.path.splitext(name)[0] for name in filenames) 
    break 

Однако, сейчас я хотел бы этот список для того чтобы только определенный тип файла, например как только файлы, которые являются .JPEG или .GIF (все еще без расширения).

я уже пытался использовать fnmatch, но он не работает ..

После комментариев я изменил код:

b = os.walk('C:\\Users\\USER\\Desktop\\FOLDER') 
os.listdir('C:\\Users\\USER\\Desktop\\FOLDER') 
f = [] 
for(dirpath, dirnames, filenames) in b: 
    f.extend(os.path.splitext(name)[0] for name in filenames if name.lower().endswith((".jpeg", ".gif"))) 

def save_to_file(text): 
    for name in f: 
     with open('C:\\Users\\USER\\Desktop\\FOLDER\\test.txt', mode='wt', encoding='utf-8') as myfile: 
      myfile.write('\n'.join(text)) 
      myfile.write('\n') 

save_to_file(f) 
+0

положить, если оператор в этом выражении генератора? – YOU

+0

Пробовали ли вы читать документы Python для модуля 'os' и базовых встроенных типов + их методов? –

ответ

1

Вы можете использовать str.endswith прохождения кортежа расширений:

f.extend((os.path.splitext(name)[0] for name in filenames if name.lower().endswith((".jpeg", ".gif"))) 

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

+0

Спасибо, это сработало отлично! – Naj

0

Если я вас правильно понял, вы хотите, чтобы проверить каждый файл name и возвращает только определенный тип файла без расширения? Поскольку вы работаете на Окна, я думаю, вы могли бы сделать:

for filename in files: 
    try: 
     ext = filename.split('.') 
     if ext[1].lower() == 'gif' or ext[1].lower() == 'jpeg': 
      print ext[0] 
    except IndexError: 
     continue 
+0

Это вызовет 'IndexError' для любого файла без расширения – Keatinge

+0

Вы правы. Я не дал полномасштабного решения, только идея. Во всяком случае, я обновил комментарий. Спасибо. – Maorg

+0

, который не исправляет его вообще. Попытка должна быть вокруг той части, где вы получаете доступ к 'ext [1]' – Keatinge

1
def find_files_by_filter(folder_path, filter): 

    """ 
    :rtype : list 
    """ 
    if not isdir(folder_path): 
     log('Folder path: '+ str(folder_path) + ' not found') 
     return [] 

    re_filter = re.compile(filter) 
    all_files = listdir(folder_path) 
    result = [file for file in all_files if re_filter.search(file)] 
    return result 

следующая:

file_name = [] 
for res in result: 
    file_name.append(res.split('.')[0] 
print(file_name) 
Смежные вопросы