Текстовый файл состоит не более чем из 10 6 символов x y z

Обновлено: 04.07.2024

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

В этом выпуске мы узнаем о создании и перемещении файлов и каталогов на примере каталога для упражнений/записи.

Шаг первый: посмотрите, где мы находимся и что у нас уже есть

Мы по-прежнему должны находиться в каталоге shell-lesson-data на рабочем столе, что мы можем проверить, используя:

Далее мы перейдем в каталог для упражнений/записи и посмотрим, что в нем содержится:

Создать каталог

Давайте создадим новый каталог с именем thesis с помощью команды mkdir thesis (у которой нет вывода):

Как можно догадаться по названию, mkdir означает «создать каталог». Поскольку тезис является относительным путем (т. е. не имеет начального слэша, например /what/ever/thesis ), новый каталог создается в текущем рабочем каталоге:

Поскольку мы только что создали каталог тезисов, в нем еще ничего нет:

Обратите внимание, что mkdir не ограничивается созданием отдельных каталогов по одному. Параметр -p позволяет mkdir создать каталог с вложенными подкаталогами за одну операцию:

Опция -R команды ls отобразит список всех вложенных подкаталогов внутри каталога. Давайте используем ls -FR для рекурсивного отображения новой иерархии каталогов, которую мы только что создали в каталоге проекта:

Два способа сделать одно и то же

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

Хорошие имена для файлов и каталогов

  1. Не используйте пробелы.

    Пробелы могут сделать имя более осмысленным, но, поскольку пробелы используются для разделения аргументов в командной строке, лучше избегать их в именах файлов и каталоги. Вместо этого вы можете использовать - или _ (например, north-pacific-gyre/ , а не north pacific gyre/ ). Чтобы проверить это, попробуйте ввести mkdir north pacific gyre и посмотрите, какой каталог (или каталоги!) создается при проверке с помощью ls -F .

  2. Не начинайте имя с - (тире).

    Команды рассматривают имена, начинающиеся с -, как параметры.

  3. Наклеивайте буквы, цифры, . (точка или точка), - (тире) и _ (подчеркивание).

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

Создать текстовый файл

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

Какой редактор?

Когда мы говорим, что nano — это текстовый редактор, мы на самом деле имеем в виду текст: он может работать только с простыми символьными данными, а не с таблицами, изображениями или любым другим удобным для человека носителем. Мы используем его в примерах, потому что это один из наименее сложных текстовых редакторов. Однако из-за этой особенности он может быть недостаточно мощным или достаточно гибким для работы, которую вам нужно будет выполнить после этого семинара. В системах Unix (таких как Linux и macOS) многие программисты используют Emacs или Vim (на изучение обоих требуется больше времени) или графический редактор, такой как Gedit. В Windows вы можете использовать Notepad++. В Windows также есть встроенный редактор под названием «Блокнот», который можно запустить из командной строки так же, как и nano для целей этого урока.

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

Давайте напечатаем несколько строк текста. Как только мы довольны нашим текстом, мы можем нажать Ctrl + O (нажмите клавишу Ctrl или Control и, удерживая ее, нажмите клавишу O), чтобы записать наши данные на диск (нас спросят, какой файл мы хотим чтобы сохранить это в: нажмите клавишу «Ввод», чтобы принять предложенный по умолчанию вариант draft.txt ).

скриншот текстового редактора nano в действии

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

Control, Ctrl или клавиша ^

  • Control-X
  • Control+X
  • Ctrl + X
  • Ctrl+X
  • ^X
  • C-x

nano не оставляет никаких выводов на экране после выхода, но теперь ls показывает, что мы создали файл с именем draft.txt :

Создание файлов другим способом

Мы увидели, как создавать текстовые файлы с помощью редактора nano. Теперь попробуйте следующую команду:

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

  2. Используйте ls -l для проверки файлов. Насколько велик my_file.txt?

  3. В каких случаях вам может понадобиться создать файл таким образом?

Решение

  1. Команда touch создает новый файл с именем my_file.txt в вашем текущем каталоге. Вы можете просмотреть этот вновь сгенерированный файл, набрав ls в командной строке. my_file.txt также можно просмотреть в проводнике файлов с графическим интерфейсом.

  2. При проверке файла с помощью ls -l обратите внимание, что размер файла my_file.txt равен 0 байт. Другими словами, он не содержит данных. Если вы откроете файл my_file.txt в текстовом редакторе, он будет пустым.

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

Что в имени?

Возможно, вы заметили, что все файлы Нелле называются "something dot something", и в этой части урока мы всегда использовали расширение .txt . Это всего лишь соглашение: мы можем назвать файл mythesis или почти что угодно. Тем не менее, большинство людей большую часть времени используют имена, состоящие из двух частей, чтобы помочь им (и их программам) различать разные типы файлов. Вторая часть такого имени называется расширением имени файла и указывает, какой тип данных содержит файл: .txt указывает на обычный текстовый файл, .pdf указывает на PDF-документ, .cfg — это файл конфигурации, полный параметров для какой-либо программы или другое, .jpg — изображение в формате PNG и т. д.

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

Именование PNG-изображения кита поскольку whit.mp3 каким-то волшебным образом не превращает его в запись песни кита, хотя может заставить операционную систему попытаться открыть его с помощью музыкального проигрывателя, когда кто-то дважды щелкнет по нему.

Перемещение файлов и каталогов

Возвращаясь к каталогу shell-lesson-data/writing,

В нашем каталоге тезисов у нас есть файл draft.txt, имя которого не особенно информативно, поэтому давайте изменим имя файла, используя mv, сокращение от «move»:

Первый аргумент сообщает mv, что мы «перемещаем», а второй — куда это должно двигаться. В этом случае мы перемещаем thesis/draft.txt в thesis/quotes.txt, что имеет тот же эффект, что и переименование файла. Действительно, ls показывает нам, что тезис теперь содержит один файл с именем quotes.txt:

Нужно быть осторожным при указании имени целевого файла, так как mv молча перезапишет любой существующий файл с таким же именем, что может привести к потере данных. Дополнительный параметр mv -i (или mv --interactive ) можно использовать, чтобы заставить mv запрашивать подтверждение перед перезаписью.

Обратите внимание, что mv также работает с каталогами.

Давайте переместим файл quotes.txt в текущий рабочий каталог. Мы снова используем mv, но на этот раз мы будем использовать только имя каталога в качестве второго аргумента, чтобы сообщить mv, что мы хотим сохранить имя файла, но поместим файл в новое место. (Вот почему команда называется «переместить».) В этом случае имя каталога, которое мы используем, является специальным именем каталога. о которых мы упоминали ранее.

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

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

ls с именем файла или каталога в качестве аргумента выводит только запрошенный файл или каталог. Если файл, указанный в качестве аргумента, не существует, оболочка возвращает ошибку, как мы видели выше. Мы можем использовать это, чтобы увидеть, что файл quotes.txt теперь присутствует в нашем текущем каталоге:

Перемещение файлов в новую папку

После выполнения следующих команд Джейми понимает, что поместила файлы sucrose.dat и maltose.dat не в ту папку. Файлы должны были быть помещены в папку raw.

Заполните пробелы, чтобы переместить эти файлы в папку raw/ (то есть в ту, куда она забыла их положить)

Решение

Напоминаем, что .. относится к родительскому каталогу (т. е. каталогу выше текущего), а . относится к текущему каталогу.

Копирование файлов и каталогов

Команда cp очень похожа на mv, за исключением того, что она копирует файл, а не перемещает его.Мы можем проверить, правильно ли он поступил, используя ls с двумя путями в качестве аргументов — как и большинству команд Unix, ls можно указать сразу несколько путей:

Мы также можем скопировать каталог и все его содержимое, используя рекурсивную опцию -r , например для резервного копирования каталога:

Мы можем проверить результат, перечислив содержимое папки thesis и thesis_backup:

Переименование файлов

  1. cp statstics.txt Statistics.txt
  2. mv statstics.txt stats.txt
  3. mv statstics.txt .
  4. cp statstics.txt.

Решение

  1. Нет. Хотя при этом будет создан файл с правильным именем, файл с неправильным именем все еще существует в каталоге, и его необходимо удалить.
  2. Да, переименовать файл можно.
  3. Нет, точка (.) указывает, куда переместить файл, но не дает нового имени файла; одинаковые имена файлов не могут быть созданы.
  4. Нет, точка (.) указывает, куда копировать файл, но не дает нового имени файла; одинаковые имена файлов не могут быть созданы.

Перемещение и копирование

Что выводит закрывающая команда ls в показанной ниже последовательности?

  1. белки-сохраненные.dat рекомбинированы
  2. воссоединено
  3. белки.dat рекомбинированы
  4. proteins-saved.dat

Решение

  1. Нет, см. объяснение выше. .profiles-saved.dat находится в папке /Users/jamie
  2. Да
  3. Нет, см. объяснение выше. .projects.dat находится в папке /Users/jamie/data/recombined
  4. Нет, см. объяснение выше. .profiles-saved.dat находится в папке /Users/jamie

Удаление файлов и каталогов

Возвращаясь к каталогу shell-lesson-data/writing, давайте наведем порядок в этом каталоге, удалив созданный нами файл quotes.txt. Для этого мы будем использовать команду Unix — rm (сокращение от «удалить»):

Мы можем подтвердить, что файл исчез, используя ls :

Удаление навсегда

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

Безопасное использование rm

Что происходит, когда мы выполняем команду rm -i thesis_backup/quotations.txt? Зачем нам нужна эта защита при использовании rm ?

Решение

Опция -i будет запрашивать перед (каждым) удалением (используйте Y, чтобы подтвердить удаление, или N, чтобы сохранить файл). Оболочка Unix не имеет корзины для мусора, поэтому все удаленные файлы исчезнут навсегда. С помощью параметра -i у нас есть возможность убедиться, что мы удаляем только те файлы, которые хотим удалить.

Если мы попытаемся удалить каталог тезисов с помощью rm thesis , мы получим сообщение об ошибке:

Это происходит потому, что rm по умолчанию работает только с файлами, а не с каталогами.

rm может удалить каталог и все его содержимое, если мы используем рекурсивную опцию -r , и он сделает это без каких-либо запросов на подтверждение:

Учитывая, что нет возможности восстановить файлы, удаленные с помощью оболочки, rm -r следует использовать с большой осторожностью (можно рассмотреть возможность добавления интерактивной опции rm -r -i ).

Операции с несколькими файлами и каталогами

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

Копировать с несколькими именами файлов

В этом упражнении вы можете протестировать команды в каталоге shell-lesson-data/exercise-data.

В приведенном ниже примере что делает cp, если задано несколько имен файлов и имя каталога?

В приведенном ниже примере что делает cp, если задано три или более имен файлов?

Решение

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

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

Использование подстановочных знаков для одновременного доступа к нескольким файлам

Подстановочные знаки

* — это подстановочный знак, который соответствует нулю или более символов. Давайте рассмотрим каталог shell-lesson-data/exercise-data/proteins: *.pdb соответствует ethan.pdb, propane.pdb и всем файлам, оканчивающимся на «.pdb». С другой стороны, p*.pdb соответствует только pentane.pdb и propane.pdb , потому что «p» в начале соответствует только именам файлов, начинающимся с буквы «p».

? также является подстановочным знаком, но соответствует только одному символу. Таким образом, ?ethan.pdb будет соответствовать метану.pdb, тогда как *ethan.pdb соответствует как ethan.pdb, так и methan.pdb.

Подстановочные знаки можно использовать в сочетании друг с другом, например. . ane.pdb соответствует трем символам, за которыми следует ane.pdb , что дает cubane.pdb ethan.pdb octane.pdb .

Когда оболочка видит подстановочный знак, он расширяет подстановочный знак, чтобы создать список совпадающих имен файлов перед выполнением запрошенной команды. В качестве исключения, если выражение с подстановочным знаком не соответствует ни одному файлу, Bash передаст выражение в качестве аргумента команде как есть. Например, ввод ls *.pdf в каталоге белков (который содержит только файлы с именами, заканчивающимися на .pdb ) приводит к сообщению об ошибке, что файл с именем *.pdf отсутствует. Однако обычно такие команды, как wc и ls, видят списки имен файлов, соответствующих этим выражениям, но не сами подстановочные знаки. Именно оболочка, а не другие программы, занимается раскрытием подстановочных знаков.

Список имен файлов, соответствующих шаблону

  1. ls *t*ane.pdb
  2. ls *t?ne.*
  3. ls *t??ne.pdb
  4. этан.*

Решение

Решение 3.

1. показывает все файлы, имена которых содержат ноль или более символов (*), за которыми следует буква t, затем ноль или более символов (*), за которыми следует ane.pdb. Это дает этан.pdb метан.pdb октан.pdb пентан.pdb .

2. показывает все файлы, имена которых начинаются с нуля или более символов ( * ), за которыми следует буква t , затем один символ ( ? ), затем ne. за которым следует ноль или более символов ( * ). Это даст нам octane.pdb и pentane.pdb, но не соответствует ничему, что заканчивается на thane.pdb.

3. устраняет проблемы варианта 2, сопоставляя два символа ( ?? ) между t и ne . Это решение.

4. показывает только файлы, начинающиеся с этана. .

Подробнее о подстановочных знаках

У Сэма есть каталог, содержащий данные калибровки, наборы данных и описания наборов данных:

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

Помогите Сэму, заполнив пустые поля.

Полученная структура каталогов должна выглядеть так

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

For counter = 1 To FullRows()
With Worksheets("sheet2").Cells(counter, 1)
.Value = Pad(9, Workbooks("XYZ.txt").Worksheets ("XYZ"). Cells(x, 1)) & _
Workbooks("XYZ.txt"). Worksheets("XYZ"). Cells(x, 2) & _
PadSP(12 , Workbooks("XYZ.txt").Worksheets("XYZ").Cells(x, 3)) & _
Convert(Workbooks("XYZ.txt").Worksheets("XYZ").Cells( x, 4)) & _
Convert(Workbooks("XYZ.txt").Worksheets("XYZ").Cells(x, 5)) & _
Convert(Workbooks("XYZ.txt ").Worksheets("XYZ").Cells(x, 6)) & _
Convert(Workbooks("XYZ.txt").Worksheets("XYZ").Cells(x, 7)) & _
Pad(10, Workbooks("XYZ.txt"). Worksheets("XYZ"). Cells(x, 8)) & _
Pad(10, Workbooks("XYZ.txt"). Рабочие листы ("XYZ"). Ячейки (x, 9)) и _
Рабочие книги ("XYZ.txt"). Рабочие листы ("XYZ"). Ячейки (x, 10) и _
Рабочие книги ( "XYZ.txt"). Рабочие листы ("XYZ"). Ячейки (x, 11) & _
" " & _
Рабочие книги ("XYZ.txt"). Рабочие листы ("XYZ"). Cells(x, 12) & _
Workbooks("XYZ.txt"). Worksheets("XYZ"). Cells(x, 13) & _
Workbooks("XYZ.txt ").Worksheets("XYZ").Cells(x, 14) & _
Workbooks("XYZ.txt").Worksheets("XYZ").Cells(x, 15)
End With
x = x + 1
Следующий счетчик

FullRows, Pad, PadSP и Convert — это функции, которые выполняют функции администратора и помогают преобразовывать данные в формат фиксированной длины. Итак, это объединяет данные, которые мне нужны, в 1 ячейку, и каждая запись форматируется таким образом. Затем я отключаю предупреждения об ошибках Excel и сохраняю в формате xlTextMSDOS. Это действительно создает для меня текстовый список, который соответствует моим потребностям фиксированной длины, ЗА ИСКЛЮЧЕНИЕМ того, что первые 16 записей имеют 11 символов табуляции, добавленных к их строкам, а затем они исчезают для остальных строк.

Я изменил данные, и происходит то же самое, я проверил "лист2", где создаются данные, и ни в одной из записей нет лишних символов, и я попытался использовать другой формат файла для текст, но ничего.

Что я делаю не так или не подумал?
спасибо,
Майк

Факты об Excel

Выберите столбец, содержащий текстовые числа. Нажмите Alt+D E F, чтобы быстро преобразовать текст в числа. Быстрее, чем "Преобразовать в число"

нирвана_

Обычная доска

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

например. ячейки (1,1) должны иметь 3 символа
ячейки (2,1) должны иметь 5 символов и т. д.

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

Python Write to File: открытие, чтение, добавление и другие функции обработки файлов

Привет! Если вы хотите научиться работать с файлами в Python, то эта статья для вас. Работа с файлами — важный навык, который должен освоить каждый разработчик Python, так что давайте начнем.

Из этой статьи вы узнаете:

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

Начнем! ✨

🔹 Работа с файлами: базовый синтаксис

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

Это основной синтаксис:

image-48

💡 Совет. Это два наиболее часто используемых аргумента для вызова этой функции. Есть шесть дополнительных необязательных аргументов. Чтобы узнать о них больше, прочитайте эту статью в документации.

Первый параметр: файл

Первым параметром функции open() является файл, абсолютный или относительный путь к файлу, с которым вы пытаетесь работать.

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

Например, путь в этом вызове функции:

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

image-7

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

image-9

Файл names.txt находится в папке "data"

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

В этом примере это будет путь:

Обратите внимание, что мы сначала пишем data/ (имя папки, за которым следует символ / ), а затем name.txt (имя файла с расширением).

💡 Совет. Три буквы .txt, следующие за точкой в ​​файле name.txt, — это «расширение» файла или его тип. В этом случае .txt указывает, что это текстовый файл.

Второй параметр: режим

Второй параметр функции open() — это режим, строка из одного символа. Этот единственный символ в основном сообщает Python, что вы планируете делать с файлом в своей программе.

  • Читать ("r").
  • Добавить ("a")
  • Напишите ("w")
  • Создать ( "x" )

Вы также можете открыть файл в:

Чтобы использовать текстовый или двоичный режим, вам необходимо добавить эти символы в основной режим. Например: "wb" означает запись в двоичном режиме.

💡 Совет: Режимы по умолчанию: чтение ("r") и текст ("t"), что означает "открыть для чтения текста" ("rt"), поэтому указывать их в open( ), если вы хотите их использовать, потому что они назначаются по умолчанию. Вы можете просто написать open() .

Почему режимы?

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

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

🔸 Как прочитать файл

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

Это основной синтаксис:

image-41

Мы просто присваиваем возвращаемое значение переменной. Например:

Я знаю, что вы можете спросить: какой тип значения возвращает open()?

Ну, файловый объект.

Давайте немного поговорим о них.

Файловые объекты

Согласно документации Python файловый объект это:

Объект, предоставляющий файловый API (с такими методами, как read() или write()) базовому ресурсу.

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

Файловые объекты имеют такие атрибуты, как:

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

Способы чтения файла

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

Прочитать()

Первый метод, о котором вам нужно узнать, это read() , который возвращает все содержимое файла в виде строки.

image-11

Вот пример:

Вы можете использовать функцию type(), чтобы убедиться, что значение, возвращаемое функцией f.read(), является строкой:

Да, это строка!

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

Вот пример:

Возвращаемое значение ограничено этим количеством байтов:

❗️Важно: файл необходимо закрыть после завершения задачи, чтобы освободить ресурсы, связанные с файлом. Для этого вам нужно вызвать метод close(), например:

image-22

Readline() и Readlines()

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

readline() читает одну строку файла, пока не достигнет конца этой строки. Завершающий символ новой строки ( \n ) сохраняется в строке.

💡 Совет. При желании вы можете указать размер, максимальное количество символов, которое вы хотите включить в результирующую строку.

image-19

Это первая строка файла.

Напротив, readlines() возвращает список со всеми строками файла в виде отдельных элементов (строк). Это синтаксис:

image-21

Обратите внимание, что в конце каждой строки, кроме последней, есть символ \n (символ новой строки).

💡 Совет. Тот же список можно получить с помощью list(f) .

Вы можете работать с этим списком в своей программе, назначив его переменной или используя его в цикле:

Мы также можем перебирать f напрямую (файловый объект) в цикле:

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

🔹 Как создать файл

Если вам нужно создать файл "динамически" с помощью Python, вы можете сделать это в режиме "x".

Посмотрим, как. Это основной синтаксис:

image-58

Вот пример. Это мой текущий рабочий каталог:

image-29

Если я запускаю эту строку кода:

Создается новый файл с таким именем:

image-30

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

💡 Совет. Изначально файл будет пустым, пока вы его не измените.

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

Согласно документации Python, это исключение (ошибка выполнения):

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

🔸 Как изменить файл

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

Добавить

"Добавление" означает добавление чего-либо в конец другого элемента. Режим "a" позволяет вам открыть файл, чтобы добавить к нему некоторое содержимое.

Например, если у нас есть этот файл:

image-43

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

Это основной синтаксис для вызова метода write():

image-52

Вот пример:

💡 Совет: обратите внимание, что я добавляю \n перед строкой, чтобы указать, что я хочу, чтобы новая строка отображалась как отдельная строка, а не как продолжение существующей строки.

Это файл сейчас, после запуска скрипта:

image-45

💡 Совет: новая строка может не отображаться в файле, пока не запустится функция f.close().

Написать

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

Здесь у нас есть этот текстовый файл:

image-43

Если я запускаю этот скрипт:

Вот результат:

image-46

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

💡 Совет. Метод write() возвращает количество написанных символов.

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

Вот пример. Это исходный файл:

image-43

Если мы запустим этот скрипт:

Строки добавляются в конец файла:

image-47

Открыть файл для нескольких операций

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

Если вы открываете файл в режиме "r" (чтение), а затем пытаетесь в него записать:

Вы получите эту ошибку:

Аналогично, если вы открываете файл в режиме "w" (запись), а затем пытаетесь его прочитать:

Вы увидите эту ошибку:

То же самое произойдет с режимом "a" (добавление).

Как мы можем это решить? Чтобы иметь возможность прочитать файл и выполнить другую операцию в той же программе, нужно добавить к режиму символ "+", вот так:

Очень полезно, правда? Это, вероятно, то, что вы будете использовать в своих программах, но обязательно включите только те режимы, которые вам нужны, чтобы избежать потенциальных ошибок.

Иногда файлы больше не нужны. Давайте посмотрим, как вы можете удалять файлы с помощью Python.

🔹 Как удалить файлы

Чтобы удалить файл с помощью Python, необходимо импортировать модуль os, который содержит функции, взаимодействующие с вашей операционной системой.

💡 Совет. Модуль – это файл Python со связанными переменными, функциями и классами.

В частности, вам понадобится функция remove(). Эта функция принимает путь к файлу в качестве аргумента и автоматически удаляет файл.

image-56

Давайте рассмотрим пример. Мы хотим удалить файл с именем sample_file.txt .

image-34

Для этого пишем такой код:

  • Первая строка: import os называется "оператором импорта". Этот оператор записывается в начале вашего файла и дает вам доступ к функциям, определенным в модуле os.
  • Вторая строка: os.remove("sample_file.txt") удаляет указанный файл.

💡 Совет: вы можете использовать абсолютный или относительный путь.

Теперь, когда вы знаете, как удалять файлы, давайте рассмотрим интересный инструмент. Менеджеры контекста!

🔸 Познакомьтесь с контекстными менеджерами

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

Синтаксис

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

image-33

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

После завершения тела менеджера контекста файл закрывается автоматически.

Пример

Вот пример:

Этот менеджер контекста открывает файл names.txt для операций чтения/записи и назначает этот файловый объект переменной f . Эта переменная используется в теле диспетчера контекста для ссылки на файловый объект.

Пытаюсь снова прочитать

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

Посмотрим, что произойдет:

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

🔹 Как обрабатывать исключения при работе с файлами

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

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

Давайте рассмотрим некоторые наиболее распространенные исключения (ошибки времени выполнения), которые могут возникнуть при работе с файлами:

ФайлНеНайденОшибка

Согласно документации Python, это исключение:

Например, если файл, который вы пытаетесь открыть, не существует в вашем текущем рабочем каталоге:

Вы увидите эту ошибку:

Давайте разберем эту ошибку построчно:

", строка 8, в . Эта строка сообщает вам, что ошибка возникла, когда код в файле, расположенном в

💡 Совет: Python очень подробно описывает сообщения об ошибках, верно? Это огромное преимущество в процессе отладки.

Ошибка разрешения

Это еще одно распространенное исключение при работе с файлами. Согласно документации Python, это исключение:

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

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

IsADirectoryError

Согласно документации Python, это исключение:

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

Как обрабатывать исключения

Для обработки этих исключений можно использовать оператор try/except. С помощью этого оператора вы можете «указать» своей программе, что делать в случае чего-то непредвиденного.

Это основной синтаксис:

Здесь вы можете увидеть пример с FileNotFoundError:

Это в основном говорит:

  • Попробуйте открыть файл named.txt .
  • Если выдается ошибка FileNotFoundError, не происходит сбой! Просто напечатайте описательное заявление для пользователя.

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

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

Это пример:

Существует множество способов настроить оператор try/except/finally, и вы даже можете добавить блок else для запуска блока кода, только если в блоке try не возникло никаких исключений.

💡 Совет. Чтобы узнать больше об обработке исключений в Python, вы можете прочитать мою статью "Как обрабатывать исключения в Python: подробное визуальное введение".

🔸 Резюме

  • С помощью Python можно создавать, читать, записывать и удалять файлы.
  • Файловые объекты имеют собственный набор методов, которые вы можете использовать для работы с ними в своей программе.
  • Менеджеры контекста помогают работать с файлами и управлять ими, автоматически закрывая их после завершения задачи.
  • Обработка исключений является ключевым элементом Python. Общие исключения при работе с файлами включают FileNotFoundError , PermissionError и IsADirectoryError . Их можно обработать с помощью try/except/else/finally.

Я очень надеюсь, что моя статья вам понравилась и оказалась полезной. Теперь вы можете работать с файлами в своих проектах Python. Посмотрите мои онлайн-курсы. Следи за мной на Твиттере. ⭐️

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