- Конструкция with#
- Открытие двух файлов#
- Работа с файлами в Python
- Как читать файлы
- Как читать файл по частям
- Как читать бинарные (двоичные) файлы
- Пишем в файлах в Python
- Использование оператора «with»
- With Open in Python – With Statement Syntax Example
- What Does Open() Do in Python?
- How Does the With Statement Work in Python?
- Conclusion
Конструкция with#
В Python существует более удобный способ работы с файлами, чем те, которые использовались до сих пор — конструкция with :
In [1]: with open('r1.txt', 'r') as f: . for line in f: . print(line) . ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
Кроме того, конструкция with гарантирует закрытие файла автоматически.
Обратите внимание на то, как считываются строки файла:
Когда с файлом нужно работать построчно, лучше использовать такой вариант.
В предыдущем выводе, между строками файла были лишние пустые строки, так как print добавляет ещё один перевод строки.
Чтобы избавиться от этого, можно использовать метод rstrip :
In [2]: with open('r1.txt', 'r') as f: . for line in f: . print(line.rstrip()) . ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 ! In [3]: f.closed Out[3]: True
И конечно же, с конструкцией with можно использовать не только такой построчный вариант считывания, все методы, которые рассматривались до этого, также работают:
In [4]: with open('r1.txt', 'r') as f: . print(f.read()) . ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !
Открытие двух файлов#
Иногда нужно работать одновременно с двумя файлами. Например, надо записать некоторые строки из одного файла, в другой.
В таком случае, в блоке with можно открывать два файла таким образом:
In [5]: with open('r1.txt') as src, open('result.txt', 'w') as dest: . : for line in src: . : if line.startswith('service'): . : dest.write(line) . : In [6]: cat result.txt service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers
Это равнозначно таким двум блокам with:
In [7]: with open('r1.txt') as src: . : with open('result.txt', 'w') as dest: . : for line in src: . : if line.startswith('service'): . : dest.write(line) . :
Работа с файлами в Python
В данном материале мы рассмотрим, как читать и вписывать данные в файлы на вашем жестком диске. В течение всего обучения, вы поймете, что выполнять данные задачи в Python – это очень просто. Начнем же.
Как читать файлы
Python содержит в себе функцию, под названием «open», которую можно использовать для открытия файлов для чтения. Создайте текстовый файл под названием test.txt и впишите:
Вот несколько примеров того, как использовать функцию «открыть» для чтения:
В первом примере мы открываем файл под названием test.txt в режиме «только чтение». Это стандартный режим функции открытия файлов. Обратите внимание на то, что мы не пропускаем весь путь к файлу, который мы собираемся открыть в первом примере. Python автоматически просмотрит папку, в которой запущен скрипт для text.txt. Если его не удается найти, вы получите уведомление об ошибке IOError. Во втором примере показан полный путь к файлу, но обратите внимание на то, что он начинается с «r». Это значит, что мы указываем Python, чтобы строка обрабатывалась как исходная. Давайте посмотрим на разницу между исходной строкой и обычной:
Как видно из примера, когда мы не определяем строку как исходную, мы получаем неправильный путь. Почему это происходит? Существуют определенные специальные символы, которые должны быть отображены, такие как “n” или “t”. В нашем случае присутствует “t” (иными словами, вкладка), так что строка послушно добавляет вкладку в наш путь и портит её для нас. Второй аргумент во втором примере это буква “r”. Данное значение указывает на то, что мы хотим открыть файл в режиме «только чтение». Иными словами, происходит то же самое, что и в первом примере, но более явно. Теперь давайте, наконец, прочтем файл!
Введите нижеизложенные строки в скрипт, и сохраните его там же, где и файл test.txt.
После запуска, файл откроется и будет прочитан как строка в переменную data. После этого мы печатаем данные и закрываем дескриптор файла. Следует всегда закрывать дескриптор файла, так как неизвестно когда и какая именно программа захочет получить к нему доступ. Закрытие файла также поможет сохранить память и избежать появления странных багов в программе. Вы можете указать Python читать строку только раз, чтобы прочитать все строки в списке Python, или прочесть файл по частям. Последняя опция очень полезная, если вы работаете с большими фалами и вам не нужно читать все его содержимое, на что может потребоваться вся память компьютера.
Давайте обратим внимание на различные способы чтения файлов.
Если вы используете данный пример, будет прочтена и распечатана только первая строка текстового файла. Это не очень полезно, так что воспользуемся методом readlines() в дескрипторе:
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
После запуска данного кода, вы увидите напечатанный на экране список, так как это именно то, что метод readlines() и выполняет. Далее мы научимся читать файлы по мелким частям.
Как читать файл по частям
Самый простой способ для выполнения этой задачи – использовать цикл. Сначала мы научимся читать файл строку за строкой, после этого мы будем читать по килобайту за раз. В нашем первом примере мы применим цикл:
Таким образом мы открываем файл в дескрипторе в режиме «только чтение», после чего используем цикл для его повторения. Стоит обратить внимание на то, что цикл можно применять к любым объектам Python (строки, списки, запятые, ключи в словаре, и другие). Весьма просто, не так ли? Попробуем прочесть файл по частям:
В данном примере мы использовали Python в цикле, пока читали файл по килобайту за раз. Как известно, килобайт содержит в себе 1024 байта или символов. Теперь давайте представим, что мы хотим прочесть двоичный файл, такой как PDF.
Как читать бинарные (двоичные) файлы
Это очень просто. Все что вам нужно, это изменить способ доступа к файлу:
Мы изменили способ доступа к файлу на rb, что значит read-binaryy. Стоит отметить то, что вам может понадобиться читать бинарные файлы, когда вы качаете PDF файлы из интернете, или обмениваетесь ими между компьютерами.
Пишем в файлах в Python
Как вы могли догадаться, следуя логике написанного выше, режимы написания файлов в Python это “w” и “wb” для write-mode и write-binary-mode соответственно. Теперь давайте взглянем на простой пример того, как они применяются.
ВНИМАНИЕ: использование режимов “w” или “wb” в уже существующем файле изменит его без предупреждения. Вы можете посмотреть, существует ли файл, открыв его при помощи модуля ОС Python.
Вот так вот просто. Все, что мы здесь сделали – это изменили режим файла на “w” и указали метод написания в файловом дескрипторе, чтобы написать какой-либо текст в теле файла. Файловый дескриптор также имеет метод writelines (написание строк), который будет принимать список строк, который дескриптор, в свою очередь, будет записывать по порядку на диск.
Выбирайте дешевые лайки на видео в YouTube на сервисе https://doctorsmm.com/. Здесь, при заказе, Вам будет предоставлена возможность подобрать не только недорогую цену, но и выгодные персональные условия приобретения. Торопитесь, пока на сайте действуют оптовые скидки!
Использование оператора «with»
В Python имеется аккуратно встроенный инструмент, применяя который вы можете заметно упростить чтение и редактирование файлов. Оператор with создает диспетчер контекста в Пайтоне, который автоматически закрывает файл для вас, по окончанию работы в нем. Посмотрим, как это работает:
With Open in Python – With Statement Syntax Example
Kolade Chris
The Python programming language has various functions and statements for working with a file. The with statement and open() function are two of those statements and functions.
In this article, you will learn how to use both the with statement and open() function to work with files in Python.
What Does Open() Do in Python?
To work with files in Python, you have to open the file first. So, the open() function does what the name implies – it opens a file for you so you can work with the file.
To use the open function, you declare a variable for it first. The open() function takes up to 3 parameters – the filename, the mode, and the encoding. You can then specify what you want to do with the file in a print function.
my_file = open("hello.txt", "r") print(my_file.read()) # Output : # Hello world # I hope you're doing well today # This is a text file
That’s not all. The open() function does not close the file, so you also have to close the file with the close() method.
So, a proper way to use the open function looks like this:
my_file = open("hello.txt", "r") print(my_file.read()) my_file.close() # Output : # Hello world # I hope you're doing well today # This is a text file
The read mode is the default file mode in Python, so if you don’t specify the mode, the code above still works fine:
my_file = open("hello.txt") print(my_file.read()) my_file.close() # Output : # Hello world # I hope you're doing well today # This is a text file
How Does the With Statement Work in Python?
The with statement works with the open() function to open a file.
So, you can re-write the code we used in the open() function example like this:
with open("hello.txt") as my_file: print(my_file.read()) # Output : # Hello world # I hope you're doing well today # This is a text file
Unlike open() where you have to close the file with the close() method, the with statement closes the file for you without you telling it to.
This is because the with statement calls 2 built-in methods behind the scene – __enter()__ and __exit()__ .
The __exit()__ method closes the file when the operation you specify is done.
With the write() method, you also write to the file as I did below:
with open("hello.txt", "w") as my_file: my_file.write("Hello world \n") my_file.write("I hope you're doing well today \n") my_file.write("This is a text file \n") my_file.write("Have a nice time \n") with open("hello.txt") as my_file: print(my_file.read()) # Output: # Hello world # I hope you're doing well today # This is a text file # Have a nice time
**You can also loop through the file and print the text line by line:
**
with open("hello.txt", "w") as my_file: my_file.write("Hello world \n") my_file.write("I hope you're doing well today \n") my_file.write("This is a text file \n") my_file.write("Have a nice time \n") with open("hello.txt") as my_file: for line in my_file: print(line) # Output: # Hello world # I hope you're doing well today # This is a text file # Have a nice time
Conclusion
You might be wondering which way you should use to work with files between the combo of with and open() and just the open() function.
I would advise you to use the combination of with and open() because the with statement closes the file for you and you get to write less code.