Как открыть несколько файлов в Python

Обновлено: 21.11.2024

В основном для открытия всех файлов внутри каталога в Python можно использовать два метода: функцию os.listdir() и функцию glob.glob(). В этом руководстве будут представлены методы открытия всех файлов в каталоге в Python. Мы также включили примеры программ, которым вы можете следовать.

Открыть все файлы в каталоге с помощью функции os.listdir() в Python

Функция listdir() внутри модуля os используется для вывода списка всех файлов в указанном каталоге. Эта функция принимает указанный путь к каталогу в качестве входного параметра и возвращает имена всех файлов внутри этого каталога. Мы можем просмотреть все файлы внутри определенного каталога с помощью функции os.listdir() и открыть их с помощью функции open() в Python.

В следующем примере кода показано, как мы можем открыть все файлы в каталоге с помощью функций os.listdir() и open().

Мы прочитали текст из трех файлов внутри каталога files/ и распечатали его на терминале в приведенном выше коде. Сначала мы использовали цикл for/in с функцией os.listdir() для перебора каждого файла, найденного в каталоге файлов. Затем мы открывали каждый файл в режиме чтения с помощью функции open() и печатали текст внутри каждого файла.

Открыть все файлы в каталоге с помощью функции glob.glob() в Python

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

Мы можем просмотреть все текстовые файлы внутри определенного каталога с помощью функции glob.glob() и открыть их с помощью функции open() в Python. В следующем примере кода показано, как мы можем открыть все файлы в каталоге с помощью функций glob.glob() и open():

Мы прочитали текст из трех файлов внутри каталога files/ и распечатали его на терминале в приведенном выше коде. Сначала мы использовали цикл for/in с функцией glob.glob() для перебора каждого файла, найденного в каталоге файлов. Затем мы открывали каждый файл в режиме чтения с помощью функции open() и печатали текст внутри каждого файла.

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

На предыдущем уроке мы анализировали значения из выходных файлов. Хотя вы, возможно, видели полезность такой вещи, вы также могли задаться вопросом, почему мы просто не искали файл, вырезали и вставляли нужные значения в электронную таблицу. Если у вас есть только 1 или 2 файла, это может быть очень разумным решением. Но что, если бы вам нужно было проанализировать 100 файлов? А если бы у вас было 1000? В таком случае метод вырезания и вставки будет очень утомительным и трудоемким.

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

Для анализа нескольких файлов нам потребуется импортировать библиотеку Python. Библиотека — это набор модулей, содержащих функции. Функции внутри библиотеки или модуля обычно связаны друг с другом. Использование библиотек и Python уменьшает объем кода, который вам нужно написать. На прошлом уроке мы импортировали os.path — модуль, обрабатывающий для нас пути к файлам.

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

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

Упражнение

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

Решение

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

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

Библиотека glob содержит функцию, также называемую glob , которая находит файлы и каталоги, имена которых соответствуют шаблону. Мы предоставляем эти шаблоны в виде строк: символ * соответствует нулю или более символам, а ? соответствует любому одному символу. Мы можем использовать это, чтобы получить имена всех файлов CSV в текущем каталоге:

Как видно из этих примеров, результатом glob.glob является список путей к файлам и каталогам в произвольном порядке. Это означает, что мы можем перебрать его, чтобы сделать что-то с каждым именем файла по очереди. В нашем случае «что-то», что мы хотим сделать, — это создать набор графиков для каждого файла в нашем наборе данных о воспалении.

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

Графики, сгенерированные для второго файла клинических испытаний, очень похожи на графики для первого файла: их средние графики показывают похожие «шумные» подъемы и спады; графики их максимумов показывают точно такой же линейный подъем и спад; и их минимальные графики показывают похожие лестничные структуры.

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

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

Нанесение различий

Нанесите на график разницу между средними показателями воспалений, зарегистрированными в первом и втором наборах данных (хранящихся в воспалениях-01.csv и воспалениях-02.csv соответственно), т. е. разницу между крайними левыми графиками первых двух рисунков.< /p>

Решение

Создать составную статистику

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

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

Решение

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

Наборы данных делятся на две категории:

  • кажущиеся «идеальными» наборы данных, которые превосходно согласуются с утверждениями доктора Маверика, но демонстрируют подозрительные максимумы и минимумы (например, воспаление-01.csv и воспаление-02.csv )
  • «шумные» наборы данных, которые в некоторой степени согласуются с утверждениями доктора Маверика, но указывают на проблемы со сбором данных, такие как спорадические пропущенные значения и даже неподходящий кандидат, попавший в клиническое испытание.

На самом деле оказывается, что все три "зашумленных" набора данных ( воспаление-03.csv , воспаление-08.csv и воспаление-11.csv ) идентичны до последнего значения. Вооружившись этой информацией, мы противостоим доктору Маверику по поводу подозрительных данных и дубликатов файлов.

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

Поздравляем! Мы изучили данные о воспалении и доказали, что наборы данных были созданы синтетическим путем.

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

Скажем, я работаю над двумя отдельными файлами .py в IDLE, которые являются частью
одной и той же программы. Есть ли у кого-нибудь проблемы, когда при изменении одного файла и
запуске другого, изменения, сделанные в первом, не обновляются?

Обычно я просто закрываю все файлы и перезапускаю IDLE, но это неудобно.
Возможно, потому что я всегда щелкаю правой кнопкой мыши -> редактировать с помощью IDLE (в Windows). Это
также запускает отдельную оболочку Python, которую я всегда закрываю.

Скажем, я работаю над двумя отдельными файлами .py в IDLE, которые являются частью
одной и той же программы. Есть ли у кого-нибудь проблемы, когда при изменении одного файла и
запуске другого изменения, сделанные в первом, не обновляются?

Обычно я просто закрываю все файлы и перезапускаю IDLE, но это неудобно.
Возможно, потому что я всегда щелкаю правой кнопкой мыши -> редактировать с помощью IDLE (в Windows). Это
также запускает отдельную оболочку Python, которую я всегда закрываю.

В последней версии IDLE *предполагалось* исправить это путем перезапуска
сеанса IDLE при запуске скрипта.
К сожалению, они не смогли заставить его работать в версии для Windows,
потому что он использует один и тот же сокет при запуске нескольких
версий. В результате IDLE практически непригоден для
серьезной работы с окнами. :-(

Есть способ обойти это. Если вы редактируете ассоциацию файлов для файлов
..py и .pyw (в меню окна проводника выберите инструменты и
параметры папки, а затем выберите типы файлов). Удалите -n из
командной строки, с которой запускается IDLE.. это позволяет запускать IDLE
с подпроцессом. *ОДНАКО* если вы сделаете это, вы сможете
открыть только одну версию IDLE за раз, второй и третий
модули/скрипты, которые вы редактируете, должны быть открыты с помощью 'open' или 'open
модуль». Если откроется второе окно оболочки, оно
зависнет.

У меня есть две ассоциации файлов: одна "Редактировать с помощью подпроцесса IDLE" и одна
"Редактировать с помощью подпроцесса IDLE без подпроцесса". они вполне успешно сосуществуют,
даже при одновременном запуске.
Для файлов, редактируемых в IDLE *с* подпроцессом,
сеанс будет перезапущен при каждом запуске скрипта. который повторно импортирует все
модули и, следовательно, включает ваши изменения. немного бреда
хотя.

Читайте также: