2016-07-04 3 views
1

У меня есть куча файлов для сортировки.Как создать список файлов в каталоге в Python

Im пытается получить список имен только файлов (или только папок) в каталоге.

path = 'C:\\test\\' 
items = os.listdir(path) #this gives me a list of both files and folders in dir 

for name in items: 
    if os.path.isfile(path + '\\' + name) == True: 
     items.remove(name) 

Я ожидал, что items будет состоять из имен папок. Но у него также есть половина имен файлов.

Однако, если я использую print(name) вместо items.remove(name), он печатает правильно.

ответ

5

Я подозреваю, что это потому, что вы меняете список «предметов», когда вы итерации по нему. Это никогда не рекомендуется. И это может привести к тому, что некоторые элементы будут пропущены. Вот почему все файлы не удаляются. Вместо цикла for сделайте что-нибудь вроде этого

items = [item for item in items if isfile(join(path, item))] 

Функция соединения находится в os.path. И вы должны использовать это вместо того, чтобы добавлять обратную косую черту самостоятельно.

2

Я хотел бы использовать os.path.isdir() в списке понимания, как так:

Для папок:

items = [f for f in os.listdir(path) if os.path.isdir(os.path.join(path, f))] 

Для файлов:

items = [f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))] 

Это создает целый список папок или файлов перед начиная удалять элементы.

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