Дополнительно
Найти все файлы в каталоге с расширением .txt в Python
Как найти все файлы в каталоге с расширением .txt
в python?
1043
20
Как найти все файлы в каталоге с расширением .txt
в python?
Вы можете использовать
glob
:или просто
os.listdir
:или если вы хотите обойти каталог, используйте
os.walk
:Используйте glob.
Что-то вроде этого должно подойти
Что-то вроде этого будет работать:
Мне нравится ОС.прогулка():
Или с помощью генераторов:
Вы можете просто использовать
pathlib
ыГлоб
<суп>1</хлебать>:или в цикле:
Если вы хотите, чтобы это рекурсивное вы можете использовать
.Глоб('**/*.тхт)
<суп>1</суп>модуль
pathlib
был включен в стандартную библиотеку в Python 3.4. Но можно установить обратно-портов, что модуль даже на старых версий Python (т. е. с помощьюстадион conda
илиПип
):pathlib
иpathlib2
.Здесь's больше версий, которые производят немного разные результаты:
Глоб.iglob()
Глоб.glob1()
fnmatch.фильтр()
path.py еще одна альтернатива: https://github.com/jaraco/path.py
Python имеет все инструменты для этого:
Питон В3.5+
Быстрый способ с помощью ОС.scandir в рекурсивной функции. Ищет все файлы с указанным расширением в папке и подпапках.
Обновление Апреля 2019 Года
Если вы ищете за каталоги, которые содержат 10 000 файлов с добавлением в список становится неэффективным. 'урожайный' результаты-лучшее решение. Я также включил функцию для преобразования выходных данных в панды фрейма данных.
``питон импорт ОС импорт заново импорт панд в качестве ПД импорт включает в себя как НП
деф findFilesInFolderYield(путь, расширение, containsTxt='', подпапки = правда, excludeText = ''): " и" и" в рекурсивную функцию, чтобы найти все файлы с расширением типа в папке (и, возможно, во всех вложенных папках тоже)
путь: база каталогов для поиска файлов расширение: расширение файла, чтобы найти. например, 'тхт'. Регулярное выражение. Или 'Общ\д' чтобы соответствовать рейтингом LS1, ls2 и LS3 и т. д. containsTxt: список строк, только находит файл, если он содержит этот текст. Игнорировать, Если '' (или пустой) подпапки: Боол. Если правда, найти файлы во всех подпапках по пути. Если false, только ищет файлы в указанной папке excludeText: текстовую строку. Игнорировать, Если ''. Будет исключить, если текстовая строка в путь. " и" и"в если тип(containsTxt) == стр: # если в строке, а не в список containsTxt = [containsTxt]
myregexobj = ре.компиляции('.' + расширение + '$') # делает, что расширение файла в конце и предшествует .
попробуйте: # Перехват OSError или FileNotFoundError: проблема файл разрешения, я считаю для входа в ОС.scandir(путь): если запись.is_file() и myregexobj.поиск(запись.путь): #
значений = [true для txt в containsTxt если txt в записи.пути и (excludeText == '' или excludeText не в записи.путь)]
если LEN(значений)== лен(containsTxt): запись доходность.стат().st_size, запись.стат().st_atime_ns, запись.стат().st_mtime_ns, запись.стат().st_ctime_ns, запись.путь
запись Элиф.is_dir() и подпапки: # если директория, затем повторить процесс, как вложенная функция выход из findFilesInFolderYield(запись.путь, расширение, containsTxt, подпапок) кроме OSError как ОСЭ: печать('не удается получить доступ к ' + путь +'. Вероятно, разрешения ошибка ', ОСЭ) кроме FileNotFoundError как сят: печати(путь +' не нашли ', сят)
деф findFilesInFolderYieldandGetDf(путь, расширение, containsTxt, подпапок = правда, excludeText = ''): " и" в" и преобразовывает возвращаемые данные из findFilesInFolderYield и создает и панды фрейма данных. Рекурсивную функцию, чтобы найти все файлы с расширением типа в папке (а также в подпапках тоже)
путь: база каталогов для поиска файлов расширение: расширение файла, чтобы найти. например, 'тхт'. Регулярное выражение. Или 'Общ\д' чтобы соответствовать рейтингом LS1, ls2 и LS3 и т. д. containsTxt: список строк, только находит файл, если он содержит этот текст. Игнорировать, Если '' (или пустой) подпапки: Боол. Если правда, найти файлы во всех подпапках по пути. Если false, только ищет файлы в указанной папке excludeText: текстовую строку. Игнорировать, Если ''. Будет исключить, если текстовая строка в путь. " и" и"в
размер файла, accessTimes, modificationTimes, creationTimes , дорожки = зип(*findFilesInFolderYield(путь, расширение, containsTxt, подпапок)) ДФ = др.Таблицы данных({ 'FLS_File_Size':размер файла, 'FLS_File_Access_Date':accessTimes, 'FLS_File_Modification_Date':НП.массив(modificationTimes).тип('timedelta64[НС]'), 'FLS_File_Creation_Date':creationTimes, 'FLS_File_PathName':пути, })
ДФ['FLS_File_Modification_Date'] = ПД.to_datetime(ДФ['FLS_File_Modification_Date'],infer_datetime_format=истина) ДФ['FLS_File_Creation_Date'] = ПД.to_datetime(ДФ['FLS_File_Creation_Date'],infer_datetime_format=истина) ДФ['FLS_File_Access_Date'] = ПД.to_datetime(ДФ['FLS_File_Access_Date'],infer_datetime_format=истина)
возвращение ДФ
доб = 'TXT и#39; # регулярное выражение containsTxt=[] путь = 'C:\myFolder' (путь, ВН, containsTxt, подпапок = ДФ = findFilesInFolderYieldandGetDf правда) ``
Чтобы получить все '.тхт' имена файлов внутри 'пути к данным' папки в виде списка в подходящие для Python способ
Я сделала тест (питон 3.6.4, W7x64), чтобы увидеть, какое решение является самым быстрым в одну папку, без подкаталогов, чтобы получить список полных путей к файлам для файлов с определенным расширением.
Короче говоря, для операционной системы эту задачу
.listdir () - это самый быстрый и составляет 1,7 x так быстро, как следующая лучшая:
ОС.прогулка()(с перерывами!), 2.7 x так быстро, как
pathlib, 3.2 х быстрее, чем ОС.scandir () и 3.3 х быстрее, чем
Глоб`. Пожалуйста, имейте в виду, что эти результаты будут меняться, когда вы нуждаетесь в рекурсивной результаты. Если вы копировать/вставить один метод, приведенный ниже, пожалуйста, добавьте .ниже() иначе .Доб не будет найден при поиске .ВН.Результаты:
Попробуйте это это найдет всех ваших файлов рекурсивно:
Использовать fnmatch: https://docs.python.org/2/library/fnmatch.html
Этот код делает мою жизнь проще.
Для получения массива и".тхт" и имена файлов из папки под названием "Сведения" в том же каталоге я обычно использую этот простой код:
Я предлагаю вам использовать fnmatch и метода верхней. Таким образом, вы можете найти любое из следующих действий:
.
Функциональное решение с суб-директории: