Найти файлы в папках python

Перебирать файлы в каталоге в Python

В этом посте будет обсуждаться, как перебирать файлы в каталоге в Python.

1. Использование os.listdir() функция

Простое решение для перебора файлов в каталоге — использование os.listdir() функция. Он возвращает список файлов и подкаталогов, присутствующих в указанном каталоге. Чтобы получить только файлы, вы можете отфильтровать список с помощью os.path.isfile() функция:

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

2. Использование os.scandir() функция

Начиная с Python 3.5, рассмотрите возможность использования os.scandir() функция, когда вам нужна информация о типе файла или атрибуте файла. Он возвращает записи каталога и информацию об атрибутах файла, обеспечивая значительно более высокую производительность по сравнению с os.listdir() .

3. Использование pathlib модуль

В Python 3.4 вы также можете использовать pathlib модуль. Чтобы перебрать файлы в каталоге, используйте Path.glob(pattern) функция, которая размещает заданный относительный шаблон в указанном каталоге и дает соответствующие файлы.

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

В качестве альтернативы вы можете использовать Path.iterdir() функция, которая возвращает объекты пути содержимого каталога. Чтобы получить расширение файла, используйте suffix имущество:

4. Использование os.walk() функция

Если вам нужно также искать подкаталоги, рассмотрите возможность использования os.walk() функция. Это дает 3-кортеж (dirpath, dirnames, filenames) для всего, что доступно из указанного каталога, где dirpath это путь к каталогу, dirnames это список имен подкаталогов в dirpath, и filenames представляет собой список имен файлов, не входящих в каталоги, в каталоге dirpath.

Источник

Как на Python найти файлы, имеющие определенное расширение

Чтобы при помощи кода на Python найти все файлы, имеющие заданное расширение, можно использовать функцию os.walk . С ее помощью вы обойдете структуру каталогов и проверите расширение каждого файла, используя метод file.endswith() .

Примечание редакции: о том, как вообще выводить списки файлов , читайте в статье “Как получить список файлов в каталоге с помощью Python”.

Например, давайте найдем все файлы с расширением .txt :

import os for root, dirs, files in os.walk('/path/to/directory'): for file in files: if file.endswith('.txt'): print(os.path.join(root, file))

Этот код выведет полный путь ко всем файлам с расширением .txt в указанном каталоге. Вы можете заменить .txt на любое другое расширение файла.

Если вы ищете быстрый ответ, я уверен, что вышеприведенное решение подойдет!

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

Читайте также:  Class object java методы

Поиск файлов по расширению в Python

Python предлагает три основных способа поиска файлов по расширению:

Давайте рассмотрим подробнее, как работает каждый из этих подходов.

1. Модуль glob

Для примера найдем при помощи модуля Python glob все файлы, имеющие расширение .txt :

import glob # Find all files with the .txt extension in the current directory txt_files = glob.glob('*.txt') # Print the names of the files found print(txt_files)

Функция glob.glob() ищет в текущем каталоге все файлы, соответствующие заданному шаблону. В данном случае шаблон – ‘*.txt’ , т.е. все файлы, имена которых заканчиваются на .txt. Результатом будет список имен файлов.

Вы также можете указать другой каталог для поиска, передав путь к каталогу в качестве первого аргумента функции glob.glob() . Например, если вы хотите найти все файлы .txt в каталоге /path/to/directory , выполните следующее:

import glob # Find all files with the .txt extension in the specified directory txt_files = glob.glob('/path/to/directory/*.txt') # Print the names of the files found print(txt_files)

Пример

У меня есть проект со следующей древовидной структурой:

. ├── Data │ ├── ages.txt │ └── numbers.txt ├── Images │ └── image.png ├── Samples │ ├── codes.txt │ └── readme.txt ├── finder.py ├── names.txt └── values.txt

Давайте при помощи Python найдем в текущей папке все текстовые файлы, т.е. имеющие расширение .txt . Для этого выполним код из предыдущего раздела и посмотрим, что произойдет:

import glob # Find all files with the .txt extension in the current directory txt_files = glob.glob('*.txt') # Print the names of the files found print(txt_files) # Вывод: # ['names.txt', 'values.txt']

Код возвращает файлы ‘names.txt’ и ‘values.txt’ , но не текстовые файлы во вложенных папках. Чтобы перечислить файлы с определенным расширением во вложенных папках, необходимо использовать рекурсивный подход.

2. Рекурсивный поиск файлов с определенным расширением

Как вы видели в предыдущем примере, функция glob.glob() ищет файлы только в указанном каталоге и не ищет ни в одном из его подкаталогов.

Для поиска файлов с определенным расширением в указанном каталоге и во всех его подкаталогах можно использовать функцию os.listdir() рекурсивным способом.

import os def find_files(dir_path, extension): # Check if the given path is a valid directory if not os.path.isdir(dir_path): return # Get a list of all the files and directories in the given directory files_and_dirs = os.listdir(dir_path) # Iterate over the list of files and directories for file_or_dir in files_and_dirs: # Construct the full path of the file or directory full_path = os.path.join(dir_path, file_or_dir) # If the full path is a directory, recursively call the function to find the files in that directory if os.path.isdir(full_path): find_files(full_path, extension) else: # If the full path is a file that ends with extension, print its path if full_path.endswith(extension): print(full_path)

Этот код определяет рекурсивную функцию find_files() , которая принимает в качестве аргумента путь к каталогу и ищет файлы в этом каталоге и всех его подкаталогах.

Она использует функцию os.listdir() для получения имен всех файлов и каталогов в указанном каталоге, а затем – функцию os.path.isdir() для проверки, является ли данный файл или каталог каталогом. Если это каталог, функция вызывает себя рекурсивно для поиска файлов с определенным расширением в этом каталоге. Если это файл, функция проверяет расширение и выводит имя файла, если оно заканчивается целевым расширением.

Читайте также:  Css checkbox checked one

Давайте вызовем эту функцию, чтобы увидеть ее в действии.

Пример

Продолжим работу с папкой проекта Example со следующей структурой:

. ├── Data │ └── ages.txt │ └── numbers.txt ├── Images │ └── image.png ├── Samples │ └── codes.txt │ └── readme.txt ├── finder.py ├── names.txt └── values.txt

Наша цель – найти в папке и ее подпапках все файлы, имеющие расширение .txt , выполнив Python-скрипт в файле finder.py .

Для этого скопируем функцию find_files из предыдущего раздела в файл finder.py . Вызовем функцию, задав в качестве параметров текущий каталог и .txt :

./Data/numbers.txt ./Data/ages.txt ./Samples/readme.txt ./Samples/codes.txt ./names.txt ./values.txt

Потрясающе! На этот раз функция нашла текстовые файлы не только на том же уровне, что и файл Python, но и во вложенных папках.

Несмотря на то, что этот пример дает отличную практику работы с рекурсией в Python, существует более простая альтернатива для поиска файлов.

3. Рекурсивный поиск файлов при помощи os.walk

Самый простой способ рекурсивного поиска всех файлов с определенным расширением в папке и ее подпапках – это использование функции os.walk .

Вот как может выглядеть ее вызов:

import os for root, dirs, files in os.walk('/path/to/directory'): for file in files: if file.endswith('.someextension'): print(os.path.join(root, file))

Этот код импортирует модуль os , который предоставляет функции для взаимодействия с операционной системой. Затем он использует функцию os.walk() для рекурсивного перебора всех каталогов и подкаталогов внутри указанного каталога (‘/path/to/directory’) .

Для каждого каталога в дереве он устанавливает три переменные: root , dirs и files . Переменная root содержит путь к текущему каталогу, dirs – список подкаталогов в этом каталоге, а files – список файлов в текущем каталоге.

Затем программа перебирает список файлов в текущем каталоге и проверяет, заканчивается ли файл указанным расширением. Если да, то печатает полный путь к этому файлу с помощью функции os.path.join() . Это позволяет найти все файлы с указанным расширением во всем дереве каталогов, а не только в текущем каталоге.

Это удобная замена довольно длинной рекурсии из предыдущего раздела.

Пример

Давайте продолжим использовать структуру проекта, которую вы уже видели в этом руководстве, и найдем все файлы .txt в папке и ее подпапках.

. ├── Data │ └── ages.txt │ └── numbers.txt ├── Images │ └── image.png ├── Samples │ └── codes.txt │ └── readme.txt ├── finder.py ├── names.txt └── values.txt

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

import os for root, dirs, files in os.walk('.'): for file in files: if file.endswith('.txt'): print(os.path.join(root, file))

Запуск finder.py с приведенным выше кодом показывает все файлы с расширением .txt :

% python3 finder.py ./names.txt ./values.txt ./Data/numbers.txt ./Data/ages.txt ./Samples/readme.txt ./Samples/codes.txt

Заключение

Сегодня вы узнали, как найти файлы с определенным расширением в Python. В качестве домашнего задания используйте функцию os.walk() , чтобы рекурсивно пройтись по папкам и подпапкам и найти все файлы с определенным расширением.

Спасибо за внимание. Успешного кодинга!

Источник

Find Files Using Python

Find Files Using Python

  1. Find File With the os.walk() Function in Python
  2. Find File With the glob.glob() Function in Python
  3. Find File With the Path.glob() Function in Python
Читайте также:  Java list new size

This tutorial will discuss the methods to find a file in Python.

Find File With the os.walk() Function in Python

If we want to find the path of a specific file on our machine with python, we can use the os module. The os module provides many os-related functionalities to our code. The os.walk() function takes a path string as an input parameter and gives us the directory path, the directory name, and the filename for each file in the path . The sample code below shows us how to find a file in Python with the os.walk() function.

import os  def findfile(name, path):  for dirpath, dirname, filename in os.walk(path):  if name in filename:  return os.path.join(dirpath, name) filepath = findfile("file2.txt", "/") print(filepath) 
/Users\maisa\Documents\PythonProjects\file2.txt 

In the above code, we declared the findfile() function that uses os.walk() function to find our file. The findfile() function takes the file’s name and the root path as input parameters and returns the path of our specified file. This approach gives us the absolute path of the file.

Find File With the glob.glob() Function in Python

We can also use the glob.glob() function to solve our current problem. The glob.glob() function takes a pathname as an input parameter and returns a list of all the file paths that match the input argument. We can specify a regular expression as an input parameter that matches our file only. The sample code below shows us how to find a file in Python with the glob.glob() function.

import glob filepath = glob.glob('**/file.txt', recursive=True) print(filepath) 

We passed our file name as the input parameter to the glob.glob() function, and it returned the relative path of our file. This method can give us the relative path as well as the absolute path of our file.

Find File With the Path.glob() Function in Python

Another approach is to use the pathlib module. This Python module offers classes that represent filesystem paths for different operating systems. We can use the Path.glob() function inside the pathlib module to solve our specific problem. This function is similar to the glob() function inside the glob module. The Path.glob() function takes a pattern as an input parameter and returns a list of path objects that match the input argument. The sample code snippet shows us how to find a file in Python with the pathlib module.

import pathlib filepath = sorted(pathlib.Path('.').glob('**/file2.txt')) print(filepath) 

We passed a pattern string that matches our file to the Path.glob() function. The Path.glob() function returns us a list of WindowsPath objects that match the pattern. With this method, we get path objects specific to our operating system.

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

Related Article — Python File

Источник

Оцените статью