Python - Как найти все одинаковые типы файлов в папке и составить из нее список? - PullRequest
1 голос
/ 14 апреля 2020

Я попробовал этот код, чтобы найти все файлы 'jpg' в папке и составить из нее список. Но результат показывает что-то похожее на приведенное ниже.

['0', '0', '0', '1', '0', '8', '.', 'j', 'p', 'g']
['0', '0', '0', '1', '0', '8', '.', 'j', 'p', 'g', '0', '0', '0', '1', '1', '4', '.', 'j', 'p', 'g']

Возвращает все символы имен файлов, чтобы перечислить не имена файлов в целом. Как вы решаете эту проблему? Заранее спасибо.

import os 

def find_names(outpath):
    root_path_list= [file for file in os.listdir(outpath)]
    jpg_file_list = []
    for idx, file in enumerate(root_path_list) :
        if file.endswith('.jpg'):
            jpg_file_list += file             
            print(jpg_file_list)

Ответы [ 5 ]

1 голос
/ 14 апреля 2020
import os
import glob

files = [os.path.basename(i) for i in glob.glob('*.jpg')]

Обратите внимание, что расширение чувствительно к регистру, если у вас есть файлы с расширением JPG, вам потребуется проделать дополнительную работу.

1 голос
/ 14 апреля 2020

Я предпочитаю использовать glob библиотеку:

Одна строка может решить вашу проблему:

import glob, os
glob.glob(os.path.join(outpath,"*.jpg"))

Для вашего кода, если вы хотите добавить элемент в список, вы должны += список.

jpg_file_list += [file] 

или используйте append

jpg_file_list.append(file)
1 голос
/ 14 апреля 2020

Вы можете использовать понимание списка:

import os 

def find_names(outpath):
    return [file for file in os.listdir(outpath) if file.lower().endswith(".jpg")]
0 голосов
/ 20 апреля 2020

Другие прокомментировали способы создания списка совпадений расширений файлов. Они напрямую не проясняют то, что я считаю другой частью ответа на ваш вопрос, почему отдельные буквы заканчиваются в вашем jpg_file_list, а не в строке имени файла.

Одна из вещей, которая затронута, но в ответах здесь явно не указано, что строка (например, имена файлов) является типом коллекции.

Это полезно для того, чтобы вы могли перебирать символы в строке, индексировать ее и получать ее фрагменты. Это может быть неприятно, хотя в некоторых случаях, когда вы думаете о нем как об элементе, а код рассматривает его как список.

В вашем коде строка имени файла обрабатывается как список, а не как отдельный элемент и символы добавляются в список по отдельности, а не в имя файла как отдельная запись.

Как уже говорили другие, чтобы изменить ваш код, чтобы учесть тот факт, что строки являются коллекциями, вам необходимо изменить:

jpg_file_list += file 

до

jpg_file_list += [file]

или

jpg_file_list.append(file)
0 голосов
/ 14 апреля 2020

Добавить запись в список

jpg_file_list.append(file)
...