Как узнать количество файлов в папке python
Перейти к содержимому

Как узнать количество файлов в папке python

  • автор:

Как мне прочитать количество файлов в папке, используя Python?

Как узнать количество файлов в определенной папке с помощью Python? Пример кода будет потрясающим!

6 ответов

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

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

Если вы хотите только сосчитать файлы, которые не являются каталогами, вы можете использовать os.listdir и os.path.file , чтобы проверить, является ли каждая запись файлом:

Или, альтернативно, используя генератор:

Или вы можете использовать os.walk следующим образом:

Я нашел некоторые из этих идей из этот поток.

Вы можете использовать модуль glob:

Или, как предлагает Марк Байерс в своем ответе, если вы хотите только файлы:

Ответ Марка Байера прост, изящный и сочетается с духом питона.

Есть проблема, однако: если вы попытаетесь запустить ее для любой другой директории, чем «.», она не будет работать, поскольку os.listdir() возвращает имена файлов, а не полный путь. Эти два значения совпадают при перечислении текущего рабочего каталога, поэтому ошибка не обнаруживается в исходном файле выше.

Например, если вы в «/home/me» и вы перечислите «/tmp», вы получите (скажем) [‘flashXVA67’]. Вы будете тестировать «/home/me/flashXVA67» вместо «/tmp/flashXVA67» с помощью метода выше.

Вы можете исправить это, используя os.path.join(), например:

Кроме того, если вы собираетесь делать этот счет много и требуют производительности, вы можете сделать это без создания дополнительных списков. Здесь менее элегантное, нерегулярное, но эффективное решение:

How to count the number of files in a directory using Python

How do I count only the files in a directory? This counts the directory itself as a file:

Mateen Ulhaq's user avatar

30 Answers 30

os.listdir() will be slightly more efficient than using glob.glob . To test if a filename is an ordinary file (and not a directory or other entity), use os.path.isfile() :

bryant1410's user avatar

Luke's user avatar

For all kind of files, subdirectories included (Python 2):

Only files (avoiding subdirectories):

MattDMo supports the strike's user avatar

This is where fnmatch comes very handy:

If you want to count all files in the directory — including files in subdirectories, the most pythonic way is:

We use sum that is faster than explicitly adding the file counts (timings pending)

An answer with pathlib and without loading the whole list to memory:

Paul's user avatar

Short and simple

Somyadeep Shrivastava's user avatar

I am surprised that nobody mentioned os.scandir :

qed's user avatar

Marcus Riemer's user avatar

ninjrok's user avatar

This uses os.listdir and works for any directory:

this can be simplified with a generator and made a little bit faster with:

While I agree with the answer provided by @DanielStutzbach: os.listdir() will be slightly more efficient than using glob.glob .

However, an extra precision, if you do want to count the number of specific files in folder, you want to use len(glob.glob()) . For instance if you were to count all the pdfs in a folder you want to use:

This is an easy solution that counts the number of files in a directory containing sub-folders. It may come in handy:

You should get an output similar to this (with the placeholders changed, of course):

файла — python удалить файл

Как узнать количество файлов в папке с помощью Python? (5)

Как узнать количество файлов в определенной папке с помощью Python? Пример кода будет потрясающим!

Вы можете использовать модуль glob :

Или, как предлагает Марк Байерс в своем ответе, если вы хотите только файлы:

Ответ Марка Байера прост, изящен и сочетается с духом питона.

Однако есть проблема : если вы попытаетесь запустить это для любого другого каталога, кроме «.», Он не будет работать, поскольку os.listdir () возвращает имена файлов, а не полный путь. Эти два являются одинаковыми при перечислении текущего рабочего каталога, поэтому ошибка остается незамеченной в источнике выше.

Например, если ваш в «/ home / me» и вы перечислите «/ tmp», вы получите (скажем) [‘flashXVA67’]. Вы будете тестировать «/ home / me / flashXVA67» вместо «/ tmp / flashXVA67» с помощью метода выше.

Вы можете исправить это, используя os.path.join (), например:

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

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

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

Если вы хотите только сосчитать файлы, которые не являются каталогами, вы можете использовать os.listdir и os.path.file чтобы проверить, является ли каждая запись файлом:

Или, альтернативно, с использованием генератора:

Или вы можете использовать os.walk следующим образом:

Я нашел некоторые из этих идей из этой темы .

pathlib , что является новым в п. 3.4, упрощается. Строка с надписью 1 делает нерекурсивный список текущей папки, которая помечена как 2 рекурсивный список.

Есть и больше положительных героев. С помощью этих дополнительных строк вы можете видеть как абсолютные, так и относительные имена файлов для тех элементов, которые являются файлами.

Получение списка файлов в директории на python

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

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

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

Решение

Способ 1. Уменьшаем путь до файла

Есть несколько способов сократить путь до нужной нам папки.

1. Переименовываем все папки, в которые вложен наш файл, на менее длинные названия. Когда путь сократится, можно выполнить удаление или перемещение.

2. Создаем символьную ссылку на конечный путь. Это можно сделать командой:

mklink /d c:\<короткий путь> c:\<длинный путь>

mklink /d «C:\Папка0» «C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5»

* в данном примере перейдя по пути C:\Папка0, мы окажемся в папке C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5.

3. Сопоставляем папку букве диска с помощью команды subst:

subst S: «C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5»

* в данном примере мы создадим диск S, который будет вести нас в папку C:\Папка\Папка 2\Папка 3\ Папка 4\Папка 5.

Способ 2. Включаем поддержку длинных файлов

Данный способ поддерживается, начиная с Windows 10 / Server 2016.

Ограничение в 255 символов — пережиток прошлого, необходимый для обеспечения совместимости с другими файловыми системами. Система не будет работать хуже, если данное ограничение отключить.

Открываем реестр (команда regedit) и переходим по пути HKLM\SYSTEM\CurrentControlSet\Control\FileSystem. Находим или создаем ключ LongPathsEnabled с типом REG_DWORD и задаем ему значение 1.

Это же действие из командной строки:

reg delete «HKLM\SYSTEM\CurrentControlSet\Control\FileSystem» /v LongPathsEnabled /f

reg add «HKLM\SYSTEM\CurrentControlSet\Control\FileSystem» /v LongPathsEnabled /t REG_DWORD /d 1

* первая команда, на всякий случай, удалит старый параметр (если его нет, команда вернет ошибку). Вторая — создаст нужный нам ключ.

Способ 3. Far Manager

Устанавливаем программу Far Manager — переходим в нужный каталог и выполняем нужные действия над файлами.

Иногда, данный способ работает только после того, как мы включили поддержку длинных имен (способ 2).

Способ 4. Укорачиваем сетевой путь

Настраиваем сетевой доступ к папке и подключаем ее как сетевой диск. Путь станет меньше.

Например, это можно сделать командой:

net use J: \\server\share /persistent:yes

* данной командой мы создадим диск J, который будет вести на сетевую папку \\server\share.

Способ 5. Используем командную строку

Если нам нужно скопировать или перенести небольшое количество файлов, мы можем воспользоваться командной строкой. Для копирования используем xcopy, для переноса — move.

xcopy <длинный путь до файла> <короткий путь>

move <длинный путь до файла> <короткий путь>

9 ответов

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

Brian R. Bondy
20 Май 2009 в 17:58

Я только что нашел встроенный imghdr модуль. Из документации Python:

Вот как это работает:

Использование модуля намного лучше, чем повторная реализация аналогичной функциональности.

Nadia Alramli
24 Май 2009 в 00:29

В дополнение к тому, что предлагает Брайан, вы можете использовать метод . проверить, не поврежден ли файл.

Two-Bit Alchemist
8 Авг 2014 в 18:32

Вы можете использовать привязки Python к libmagic, python-magic, а затем проверить MIME типы. Это не скажет вам, повреждены ли файлы или нет, но должно быть в состоянии определить, какой тип изображения это.

Kamil Kisiel
20 Май 2009 в 19:29

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

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

tsveti_iko
8 Авг 2019 в 09:26

tsveti_iko
8 Авг 2019 в 09:26

Я также реализовал следующее решение в своем скрипте Python здесь, на GitHub.

Я также проверил, что поврежденные файлы (jpg) часто не являются «испорченными» изображениями, т.е. поврежденный файл изображения иногда остается допустимым файлом изображения, исходное изображение потеряно или изменено, но вы все равно можете загрузить его без ошибок. Но, усечение файла всегда вызывает ошибки.

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

В случае, если вы хотите обнаружить также поврежденные изображения, @Nadia Alramli правильно предлагает метод , но этот не обнаруживает все возможные дефекты изображения , например, не обнаруживает усеченные изображения (которые большинство зрителей часто загружают с серой областью).

Подушка также может обнаруживать дефекты этого типа, но вам нужно применить манипуляцию с изображением или декодировать / перекодировать изображение, чтобы инициировать проверку. Наконец, я предлагаю использовать этот код:

В случае дефектов изображения этот код вызовет исключение. Пожалуйста, учтите, что im.verify примерно в 100 раз быстрее, чем выполнение манипуляций с изображениями (и я думаю, что flip — это одно из самых дешевых преобразований). С помощью этого кода вы будете проверять набор изображений со скоростью около 10 МБ / с со стандартной подушкой или 40 МБ / с с модулем Pillow-SIMD (современный процессор с частотой 2,5 ГГц x86_64).

Для других форматов psd , xcf , .. вы можете использовать Imagemagick обертку Wand , код выглядит следующим образом :

Но из моих экспериментов Wand не обнаруживает усеченные изображения, я думаю, он загружает недостающие части в виде серой области без запроса.

Я заметил, что Imagemagick имеет внешнюю команду определить , что может выполнить работу, но я не нашел способа вызвать эту функцию программно, и я не проверял этот маршрут.

Я предлагаю всегда выполнять предварительную проверку, проверьте, чтобы filesize не был нулевым (или очень маленьким), это очень дешевая идея:

Fabiano Tarlao
28 Ноя 2018 в 01:30

В Linux вы можете использовать python-magic (http://pypi.python.org/ pypi / python-magic / 0.1), которая использует libmagic для определения форматов файлов.

AFAIK, libmagic просматривает файл и пытается рассказать вам больше о нем, чем просто о формате, например о растровых измерениях, версии формата и т. Д. Так что вы можете увидеть это как поверхностный тест на «достоверность».

Для других определений «действительный» вам, возможно, придется написать свои собственные тесты.

fmarc
20 Май 2009 в 18:22

Будет ли проверка расширений файлов приемлемой или вы пытаетесь подтвердить, что сами данные представляют собой файл изображения?

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

doomspork
20 Май 2009 в 17:57

Ну, я не знаю о внутренностях PSD, но я, конечно, знаю, что, по сути, SVG не является файлом изображения как таковым, — он основан на XML, так что, по сути, это простой текстовый файл.

shylent
20 Май 2009 в 18:03

Открытие файлов в Python

Python по умолчанию предоставляет нам функцию open(), которая предназначена для открытия файла. Рассмотрим пример использования данной функции.

Функция open. чтение и запись текстовых файлов в python. урок 24 Получение списка файлов в директории на python Список oslistdirбудет немного более эффективным, чем использование globglob Чтобы проверить, является ли имя файла обычным файлом а Как прочитать текстовый файл в python Запись в файл в python и чтение файла Bash — как мне узнать, что обычный файл не существует в bash? Работа с каталогами python Существует ли файл в python, примеры os.path.exists() и os.path.isfile() Как перечислить файлы в каталоге с помощью python? - pythobyte.com

Существует несколько режимов открытия файла, r — для чтения, w — для записи, a — для добавления. По умолчанию Python использует режим чтение файла

Режим Описание
r Открывает файл для чтения. (по умолчанию)
w Открывает файл для записи. Создает новый файл, если он не существует, или усекает файл, если он существует.
x Открывает файл для эксклюзивного создания. Если файл уже существует, операция завершается неудачей.
a Открывает файл для добавления в конце файла без его усечения. Создает новый файл, если он не существует.
t Открывается в текстовом режиме. (по умолчанию)
b Открывается в двоичном режиме.
+ Открывает файл для обновления (чтения и записи)

Режим открытия указывается следующим образом:

Кроме того, надо учитывать кодировку файла, по умолчанию кодировка зависит от вашей операционной системы. Для Windows, кодировка cp1251, а для Linux utf — 8. Соответственно, что бы наша программа вела себя одинаково на разных платформах, лучшим решением будет указание явной кодировки.

Проверка существует ли файл используя open() и try … except

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

Есть еще один прямолинейный алгоритм Python для проверки существования файла: Вы просто пытаетесь открыть файл при помощи встроенной функции , вот так:

open(‘нет-такого-файла.txt’)
FileNotFoundError:
» No such file or directory: ‘нет-такого-файла.txt’»

» No such file or directory: ‘нет-такого-файла.txt’»

Если файл существует, то файл успешно откроется и вернет валидный объект для дальнейшей обработки файла. Если файл не существует, появится ошибка FileNotFoundError:

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

try:
f = open(‘нет-такого-файла.txt’)
f.close()
except FileNotFoundError:
print(‘Файл не существует!’)

print(‘Файл не существует!’)

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

Это занимает ресурсы системы и может снизить производительность ваших программ

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

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

Теперь, та же техника “просто попробуем открыть файл” также работает для выяснения, является ли файл доступным и читаемым. Вместо поиска ошибок FileNotFoundError, вам нужно искать любые ошибки типа IOError:

try:
f = open(‘new-music.mp3’)
f.close()
except IOError:
print(‘Файл недоступен’)
print(‘Файл доступен’)

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

def is_accessible(path, mode=’r’):
«»»
Проверка, является ли файл или папка из `path`
доступным для работы в предоставленным `mode` формате.
«»»
try:
f = open(path, mode)
f.close()
except IOError:
return False
return True

Проверка, является ли файл или папка из `path`
доступным для работы в предоставленным `mode` формате.
«»»

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

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

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

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

How to Compare Strings in Bash

17 Мая 2020
&vert;

Это руководство описывает, как сравнивать строки в Bash.

При написании сценариев Bash вам часто нужно сравнивать две строки, чтобы проверить, равны они или нет. Две строки равны, если они имеют одинаковую длину и содержат одинаковую последовательность символов.

Операторы сравнения

Операторы сравнения — это операторы, которые сравнивают значения и возвращают true или false. При сравнении строк в Bash вы можете использовать следующие операторы:

  • и — Оператор равенства возвращает true, если операнды равны.
    • Используйте оператор с командой.
    • Используйте оператор с командой для сопоставления с образцом.

    Ниже следует отметить несколько моментов при сравнении строк:

    • Пустое пространство должно быть использовано между бинарным оператором и операндами.
    • Всегда используйте двойные кавычки вокруг имен переменных, чтобы избежать каких-либо проблем с разделением слов или смещениями
    • Bash не разделяет переменные по «типу», переменные обрабатываются как целое число или строка в зависимости от контекста.

    Проверьте, равны ли две строки

    В большинстве случаев при сравнении строк вы хотите проверить, равны ли строки или нет.

    Следующий скрипт использует оператор if и команду test, чтобы проверить, совпадают ли строки с оператором:

    Когда скрипт выполняется, он напечатает следующий вывод.

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

    Запустите скрипт и введите строки при появлении запроса:

    Вы также можете использовать логические и и или для сравнения строк:

    Проверьте, содержит ли строка подстроку

    Есть несколько способов проверить, содержит ли строка подстроку.

    Один из подходов заключается в использовании подстроки с символами звездочки, что означает совпадение всех символов.

    Скрипт отобразит следующее:

    Другой вариант — использовать оператор регулярного выражения, как показано ниже:

    Точка, за которой следует звездочка, соответствует нулю или большему количеству вхождений любого символа, кроме символа новой строки.

    Проверьте, пуста ли строка

    Довольно часто вам также необходимо проверить, является ли переменная пустой строкой или нет. Вы можете сделать это, используя и оператор.

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

    Следующие сценарии сравнивают две строки лексикографически:

    Скрипт выведет следующее:

    Сравнение строк — одна из самых основных и часто используемых операций в сценариях Bash. Прочитав этот урок, вы должны хорошо понимать, как сравнивать строки в Bash. Вы также можете проверить наше руководство о конкатенации строк .

    Операция in

    С помощью in мы можем проверить наличие элемента в списке, строке и любой другой итерируемой переменной.

    fruits =
    if ‘Apple’ in fruits:

    print(‘В списке есть элемент Apple’)

    >>> В списке есть элемент Apple

    fruits =
    if ‘Lemon’ in fruits:

    print(‘В списке есть элемент Lemon’)
    else:’

    print(‘В списке НЕТ элемента Lemon’)

    >>> В списке НЕТ элемента Lemon

    Приведу более сложный пример:

    my_favorite_fruits =
    for item in all_fruits:

    if item in my_favorite_fruits:

    print(item + ‘ is my favorite fruit’)

    print(‘I do not like ‘ + item)

    >>> Apple is my favorite fruit
    >>> I do not like Grape
    >>> I do not like Peach
    >>> Banan is my favorite fruit
    >>> Orange is my favorite fruit

    Методы проверки наличия файла в Python

    Мы можем проверить, существует ли файл в Python, используя различные методы, упомянутые ниже.

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

    Модуль в Python поставляется с некоторыми интересными методами, такими как , , и т. Д. Давайте рассмотрим несколько примеров один за другим:

    • патлиб.Path() возвращает объект path, который приводит к указанному имени файла, хранящемуся в переменной ‘ path ‘ ,
    • метод path lib.exists() проверяет, ведет ли указанный путь к допустимому файлу или нет. В нашем случае, как file.txt путь существует, результат верен.
    • с другой стороны, метод is_file() проверяет, является ли объект path файлом. Что в нашем случае верно, как мы видим на выходе.
    • метод is_dir() проверяет, является ли указанный путь каким-либо каталогом. Здесь, так как наши file.txt путь-это не каталог, который мы получаем на выходе.

    2. Использование модуля ОС

    Одним из широко используемых методов проверки существования файлов является модуль os.path из стандартной библиотеки python. Он поставляется с некоторыми базовыми методами, такими как и , аналогичными модулю pathlib . Давайте подробнее рассмотрим один пример:

    • Аналогично path lib modules и методы , а также также выполняют аналогичную проверку соответственно.
    • Единственное различие заключается в том, что модуль pathlib привносит какой-то отличный объектно-ориентированный подход и рассматривает путь как объект пути, а не строку(в случае модуля ос).

    3.Использование обработки исключений

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

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

    В приведенном выше коде с file.txt существовал в нашей системе, FileNotFoundError не вызывается, и файл успешно закрывается.

    Опять же, когда no-file.txt не существует на вашем компьютере:

    Таким образом, мы можем ясно видеть, что, когда файл не найден, возникает исключение FileNotFoundError .

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

    Что такое метод read() в Python?

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

    Списки в python Получение списка файлов в директории на python Чтение и запись файлов в python - документация по языку программирования python 6 способов в python подсчитать уникальные значения в списке - pythobyte.com Слишком длинный путь к источнику. ошибка при удалении файлов Как проверить, являются ли элементы в списке python в другом - pythobyte.com Как проверить, существует ли файл или каталог в bash - команды linux Список каталогов и список файлов в каталоге на python Python - как подсчитать общее количество строк в текстовом файле с помощью python - question-it.com Python проверьте, если путь файл или каталог - pythobyte.com

    В этом примере давайте используем метод для вывода на экран списка имен из файла demo.txt:

    Запустим этот код и получим следующий вывод:

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

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

    Если аргумент размера опущен или число отрицательное, то будет прочитан весь файл.

    Как открыть текстовый файл в Python с помощью open()

    Если вы хотите прочитать текстовый файл с помощью Python, вам сначала нужно его открыть.

    Вот так выглядит основной синтаксис функции :

    Имена файлов и правильные пути

    Если текстовый файл, который нужно открыть, и ваш текущий файл находятся в одной директории (папке), можно просто указать имя файла внутри функции . Например:

    На скрине видно, как выглядят файлы, находящиеся в одном каталоге:

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

    В этом примере файл со случайным текстом находится в папке, отличной от той, где находится файл с кодом main.py:

    В таком случае, чтобы получить доступ к этому файлу в main.py, вы должны включить имя папки с именем файла.

    Если путь к файлу будет указан неправильно, вы получите сообщение об ошибке .

    Таким образом, чтобы указать путь к файлу правильно, важно отслеживать, в каком каталоге вы находитесь

    Необязательный параметр режима в open()

    При работе с файлами существуют разные режимы. Режим по умолчанию – это режим чтения.

    Он обозначается буквой .

    Вы также можете опустить и просто написать .

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

    Полный список других режимов можно найти в .

    Дополнительные параметры для функции open() в Python

    Функция может также принимать следующие необязательные параметры:

    • buffering
    • encoding
    • errors
    • newline
    • closefd
    • opener

    Если вы хотите узнать больше об этих опциональных параметрах, можно заглянуть в .

    Вступление

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

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

    Давайте перейдем к теме и рассмотрим некоторые методы проверки существования файла.

    Закрытие файла в Python

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

    Вышеописанный код, это всего лишь пример работы с файлами, мы не должны забывать, что в ходе работы нашей программы, может произойти что то непредвиденное. Для таких случаев мы используем блок try…finally, о котором мы говорим чуть позже. Ниже пример, с блоком исключений:

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

    Лучшим же методом правильного закрытия файла, является конструкция with. Данная конструкция гарантирует нам правильное закрытие файла.

    Индексирование

    Что же такое индексирование? Это загадочное слово обозначает операцию обращения к элементу по его порядковому номеру ( ( ・ω・)ア напоминаю, что нумерация начинается с нуля). Проиллюстрируем это на примере:

    fruits =
    print(fruits[])
    print(fruits)
    print(fruits)

    Списки в Python являются изме­няемым типом данных. Мы можем изменять содер­жимое каждой из ячеек:

    Индексирование работает и в обратную сторону. Как такое возможно? Всё просто, мы обра­щаемся к элементу списка по отрица­тельному индексу. Индекс с номе­ром -1 дает нам доступ к после­днему элементу, -2 к предпоследнему и так далее.

    fruits =
    print(fruits)
    print(fruits)
    print(fruits)
    print(fruits)

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

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

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

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

    Чтение файла

    С помощью файлового метода можно прочитать файл целиком или только определенное количество байт. Пусть у нас имеется файл data.txt с таким содержимым:

    Откроем его и почитаем:

    Сначала считываются первые десять символов. Последующий вызов считывает весь оставшийся текст. После этого объект файлового типа f1 становится пустым.

    Заметим, что метод возвращает строку, и что конец строки считывается как .

    Для того, чтобы читать файл построчно существует метод :

    Метод считывает сразу все строки и создает список:

    Объект файлового типа относится к итераторам. Из таких объектов происходит последовательное извлечение элементов. Элементами в данном случае являются строки-линии файла. Поэтому считывать данные из них можно сразу в цикле без использования методов чтения:

    Здесь выводятся лишние пустые строки, потому что функция преобразует в переход на новую строку. К этому добавляет свой переход на новую строку. Создадим список строк файла без :

    Переменной i присваивается очередная строка файла. Мы берем ее срез от начала до последнего символа, не включая его. Следует иметь в виду, что это один символ, а не два.

    Функция open

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

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

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

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

    Если при вызове второй аргумент не указан, то файл открывается в режиме чтения как текстовый файл. Чтобы открыть файл как байтовый, дополнительно к букве режима чтения/записи добавляется символ . Буква обозначает текстовый файл. Поскольку это тип файла по умолчанию, то обычно ее не указывают.

    Нельзя указывать только тип файла, то есть есть ошибка, даже если файл открывается на чтение. Правильно – . Только текстовые файлы мы можем открыть командой , потому что и и подразумеваются по-умолчанию.

    Функция возвращает объект файлового типа. Его надо либо сразу связать с переменной, чтобы не потерять, либо сразу прочитать.

    20 ответов

    будет немного более эффективным, чем использование . Чтобы проверить, является ли имя файла обычным файлом (а не каталогом или другим объектом), используйте :

    Bruno Bronosky
    15 Сен 2014 в 22:06

    Это использует и работает для любого каталога:

    Это можно упростить с помощью генератора и сделать немного быстрее с помощью:

    joaquin
    7 Июн 2012 в 19:14

    Mohit Dabas
    29 Сен 2014 в 06:30

    Marcus Riemer
    20 Фев 2013 в 12:25

    Luke
    24 Апр 2018 в 09:29

    Я сделал это, и это вернуло количество файлов в папке (Attack_Data) … это работает отлично.

    Python - как проверить, является ли файл допустимым файлом изображения? - question-it.com Функция open. чтение и запись текстовых файлов в python Чтение и запись файлов в python Python урок 9. работа с файлами 6 способов в python подсчитать уникальные значения в списке

    jkalden
    11 Янв 2017 в 16:03

    Вот простая однострочная команда, которая мне показалась полезной:

    Bojan Tunguz
    9 Май 2016 в 18:23

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

    Ismail
    19 Апр 2015 в 10:04

    Если вы хотите сосчитать все файлы в каталоге, включая файлы в подкаталогах, самый питонический способ:

    Мы используем сумму, которая быстрее, чем явное добавление количества файлов (время ожидания)

    Mr_and_Mrs_D
    22 Дек 2017 в 13:51

    Взято из этой записи

    Kristian Damian
    13 Апр 2010 в 18:48

    Он просто подсчитывает количество файлов в каталоге, я использовал технику понимания списка, чтобы перебрать определенный каталог, возвращая все файлы взамен. «len (возвращенный список)» возвращает количество файлов.

    Agha Saad
    31 Июл 2018 в 15:06

    Если вы будете использовать стандартную оболочку операционной системы, вы можете получить результат гораздо быстрее, чем с использованием чисто питонического способа.

    Пример для Windows:

    styler
    8 Апр 2015 в 13:38

    Хотя я согласен с ответом @DanielStutzbach: будет несколько более эффективным, чем использование .

    Однако для дополнительной точности, если вы хотите посчитать количество определенных файлов в папке, вы хотите использовать . Например, если вам нужно сосчитать все PDF-файлы в папке, которую вы хотите использовать:

    LBes
    18 Окт 2018 в 09:17

    Для всех видов файлов, подкаталоги включены:

    Только файлы (без подкаталогов):

    Guillermo Pereira
    14 Дек 2016 в 14:01

    Я удивлен, что никто не упомянул :

    qed
    18 Май 2017 в 09:24

    Я использовал для структуры каталогов, аналогичной

    Обе следующие опции возвращают 4 (как и ожидалось, , т. Е. Сами вложенные папки не считаются )

    user799188
    24 Ноя 2016 в 06:45

    Здесь очень удобно использовать fnmatch:

    Подробнее: http://docs.python.org/2/library/fnmatch.html а>

    ngeek
    31 Май 2013 в 20:55

    tzot
    13 Апр 2010 в 22:31

    rash
    1 Июл 2014 в 10:18

    Код Люка переформатировать.

    okobaka
    30 Май 2012 в 08:26

    Методы работы с файлами

    Методы Описание
    close() Закрывает открытый файл.
    detach()
    fileno() Возвращает целое число (файловый дескриптор) файла.
    flush() Сбрасывает буфер записи потока файлов.
    isatty() ВОЗВРАТ True если файловый поток является интерактивным.
    read(n) Читает самое большее n символы из файла. Читает до конца файла, если он отрицательный или None.
    readable() ВОЗВРАТ True если файловый поток можно прочитать.
    readline(n=-1) Считывает и возвращает одну строку из файла
    readlines(n=-1) Считывает и возвращает список строк из файла
    seek(offset,from=SEEK_SET)
    seekable() ВОЗВРАТ True если файловый поток поддерживает произвольный доступ.
    tell() Возвращает текущее местоположение файла.
    truncate(size=None) Изменяет размер потока файлов следующим образом size байты. Если size не указан, изменяет размер до текущего местоположения.
    writable() ВозвращаетTrue, если файловый поток может быть записан.
    write(s) Записывает строку sв файл и возвращает количество записанных символов.
    writelines(lines) Записывает список lines в файл.

    Вывод

    Ведутся споры, какой вариант является лучшим, какой наиболее элегантным и какой является наиболее «питоничным». Мне нравится простота метода os.walk(), а также модули fnmatch и pathlib.

    Две версии с процессами/конвейером и итератором требуют более глубокого понимания процессов UNIX и знаний Python, поэтому они не могут быть предпочтительными для всех программистов из-за их дополнительной (и избыточной) сложности.

    Чтобы найти ответ на этот вопрос, выберем самой быстрой из них, воспользовавшись удобным модулем timeit. Данный модуль подсчитывает время, прошедшее между двумя событиями.

    Для сравнения всех решений без их изменений, воспользуемся функциональностью Python: вызовем интерпретатор с модулем timeit и соответствующим Python скриптом. Для автоматизации процесса напишем shell скрипт

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *