# Cписок файлов директории

## os.walk()

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

os.walk() возвращает список из трех элементов: имя корневого каталога, список имен вложенных папок и список файлов в текущем каталоге. Он одинаково хорошо работает с интерпретаторами Python 2 и 3.

```python
import os
for root, dirs, files in os.walk("."):  
    for filename in files:
        print(filename)
```

## pathlib

Модуль pathlib предназначен для парсинга, сборки, тестирования и иной работы с именами файлов и их путями, используя объектно-ориентированный API вместо низкоуровневых строковых операций. Начиная с Python 3 модуль находится в стандартной библиотеке.

В следующем листинге определяется текущий каталог точкой («.»). Затем метод iterdir() возвращает итератор, который возвращает имена всех файлов. Далее циклом for распечатываются имена файлов друг за другом.

```python
import pathlib
# определение пути
currentDirectory = pathlib.Path('.')
for currentFile in currentDirectory.iterdir():  
    print(currentFile)
```

В качестве альтернативы, можно отфильтровать файлы по именам с помощью метода glob. Таким образом, получаем требуемые файлы. Например, в приведенном ниже коде перечисляются Python файлы в выбранном каталоге, указав шаблон «\*.py» в glob.

```python
import pathlib
# определение пути
currentDirectory = pathlib.Path('.')
 
# определение шаблона
currentPattern = "*.py"
for currentFile in currentDirectory.glob(currentPattern):  
    print(currentFile)
```

## os.scandir()

В Python 3.6 добавлен новый метод scandir(), доступный из модуля os. Как понятно из названия он значительно упрощает получение списка файлов в каталоге.

Чтобы определить текущий рабочий каталог и сохранить его, инициализируем значение переменной path, для этого импортируем модуль os и вызовем функцию getcwd(). Далее, scandir() возвращает список записей для выбранного пути, которые проверяются на принадлежность файлу, используя метод is\_file().

```python
import os
# определение текущей рабочей директории
path = os.getcwd()
# чтение записей
with os.scandir(path) as listOfEntries:  
    for entry in listOfEntries:
        # печать всех записей, являющихся файлами
        if entry.is_file():
            print(entry.name)
```

## Комбинация os и fnmatch

Решение, использующее подпроцессы, элегантно, но требует большого количества кода. Вместо этого, давайте объединим методы из двух модулей os и fnmatch. Этот вариант также работает с Python 2 и 3.

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

В завершение, с помощью fnmatch отфильтровываются искомые записи и распечатываются соответствующие записи в stdout.

```python
import os, fnmatch
listOfFiles = os.listdir('.')  
pattern = "*.py"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
            print(entry)
```

Результат выполнения

```
$ python find-files.py
find-files.py  
find-files2.py  
find-files3.py  
...
```

Інші методи та повна стаття

### os.walk()

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

os.walk() возвращает список из трех элементов: имя корневого каталога, список имен вложенных папок и список файлов в текущем каталоге. Он одинаково хорошо работает с интерпретаторами Python 2 и 3.

```python
import os
for root, dirs, files in os.walk("."):  
    for filename in files:
        print(filename)
```

### pathlib

Модуль pathlib предназначен для парсинга, сборки, тестирования и иной работы с именами файлов и их путями, используя объектно-ориентированный API вместо низкоуровневых строковых операций. Начиная с Python 3 модуль находится в стандартной библиотеке.

В следующем листинге определяется текущий каталог точкой («.»). Затем метод iterdir() возвращает итератор, который возвращает имена всех файлов. Далее циклом for распечатываются имена файлов друг за другом.

```python
import pathlib
# определение пути
currentDirectory = pathlib.Path('.')
for currentFile in currentDirectory.iterdir():  
    print(currentFile)
```

В качестве альтернативы, можно отфильтровать файлы по именам с помощью метода glob. Таким образом, получаем требуемые файлы. Например, в приведенном ниже коде перечисляются Python файлы в выбранном каталоге, указав шаблон «\*.py» в glob.

```python
import pathlib
# определение пути
currentDirectory = pathlib.Path('.')
 
# определение шаблона
currentPattern = "*.py"
for currentFile in currentDirectory.glob(currentPattern):  
    print(currentFile)
```

### os.scandir()

В Python 3.6 добавлен новый метод scandir(), доступный из модуля os. Как понятно из названия он значительно упрощает получение списка файлов в каталоге.

Чтобы определить текущий рабочий каталог и сохранить его, инициализируем значение переменной path, для этого импортируем модуль os и вызовем функцию getcwd(). Далее, scandir() возвращает список записей для выбранного пути, которые проверяются на принадлежность файлу, используя метод is\_file().

```python
import os
# определение текущей рабочей директории
path = os.getcwd()
# чтение записей
with os.scandir(path) as listOfEntries:  
    for entry in listOfEntries:
        # печать всех записей, являющихся файлами
        if entry.is_file():
            print(entry.name)
```

### Комбинация os и fnmatch

Решение, использующее подпроцессы, элегантно, но требует большого количества кода. Вместо этого, давайте объединим методы из двух модулей os и fnmatch. Этот вариант также работает с Python 2 и 3.

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

В завершение, с помощью fnmatch отфильтровываются искомые записи и распечатываются соответствующие записи в stdout.

```python
import os, fnmatch
listOfFiles = os.listdir('.')  
pattern = "*.py"  
for entry in listOfFiles:  
    if fnmatch.fnmatch(entry, pattern):
            print(entry)
```

Результат выполнения

```
$ python find-files.py
find-files.py  
find-files2.py  
find-files3.py  
...
```

Інші методи та повна стаття:

{% embed url="https://digitology.tech/posts/poluchenie-spiska-fajlov-v-direktorii-na-python/" %}
