Мне нужно перебрать все .asm
файлы в данном каталоге и выполнить с ними некоторые действия.
Как это можно сделать эффективным способом?
Оригинальный ответ:
import os
for filename in os.listdir(directory):
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Python 3.6 версия вышеупомянутого ответа, используя os
- при условии, что у вас есть путь к каталогу как str
объект в переменной с именем directory_in_str
:
import os
directory = os.fsencode(directory_in_str)
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename.endswith(".asm") or filename.endswith(".py"):
# print(os.path.join(directory, filename))
continue
else:
continue
Или рекурсивно, используя pathlib
:
from pathlib import Path
pathlist = Path(directory_in_str).glob('**/*.asm')
for path in pathlist:
# because path is object not string
path_in_str = str(path)
# print(path_in_str)
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) if filename.endswith(".asm") or filename.endswith(".py"): # print(os.path.join(directory, filename)) continue else: continue
print(os.path.join(directory, filename))
нужно изменить, чтобыprint(os.path.join(directory_in_str, filename))
заставить его работать в python 3.6for entry in os.scandir(path): print(entry.path)
if filename.endswith((".asm", ".py")):
чтобыif filename.endswith(".asm") or filename.endswith(".py"):
Это будет повторять все файлы-потомки, а не только непосредственные дочерние элементы каталога:
источник
Вы можете попробовать использовать модуль glob :
и начиная с Python 3.5 вы также можете искать в подкаталогах:
Из документов:
источник
Начиная с Python 3.5, с os.scandir ( ) все намного проще
источник
entry
является posix.DirEntry типа с кучей удобных методов , таких какentry.is_dir()
,is_file()
,is_symlink()
Python 3.4 и более поздние версии предлагают pathlib в стандартной библиотеке. Вы могли бы сделать:
Или, если вам не нравятся списки:
Path
объекты могут быть легко преобразованы в строки.источник
Вот как я перебираю файлы в Python:
НИКАКАЯ ИЗ ЭТИХ ТЕХНИК НЕ ГАРАНТИРУЕТ НИКАКОГО ЗАКАЗА Итераций
Да супер непредсказуемо. Обратите внимание, что я сортирую имена файлов, что важно, если порядок файлов имеет значение, т.е. для видеокадров или сбора данных, зависящих от времени. Не забудьте поставить индексы в ваших именах файлов, хотя!
источник
from pkg_resources import parse_version
иfilenames.sort(key=parse_version)
сделал это.Вы можете использовать glob для ссылки на каталог и список:
Чтобы получить список всех каталогов в массиве, вы можете использовать os :
источник
Я еще не совсем доволен этой реализацией, я хотел иметь собственный конструктор, который бы делал так
DirectoryIndex._make(next(os.walk(input_path)))
, чтобы вы могли просто передать путь, для которого вы хотите получить список файлов. Редактирование приветствуется!источник
Мне действительно нравится использовать
scandir
директиву, встроенную вos
библиотеку. Вот рабочий пример:источник