Работа с файлами в python
Мне необходимо, хотя бы базово, разобраться, как работать с файлами в python для того, чтобы выполнить простенькую задачу.
Основым источником буду использовать данную статью: https://realpython.com/working-with-files-in-python/
Чтение и запись файлов в Python
Источник, с которым буду работать: https://realpython.com/read-write-files-python/
- По своей сути файлы представляют из себя набор байтов
- При работе с файлами важно учитывать, что в разных ОС (Windows и Unit) они обрабатываются по разному:
- в Windows для обозначения новой строки используются символы
CR+LF
или\r\n
- в Unix для обозначения новой строки используются
LF
или\n
Пример из Windows:
- в Windows для обозначения новой строки используются символы
Pug\r\n
Jack Russell Terrier\r\n
English Springer Spaniel\r\n
German Shepherd\r\n
Staffordshire Bull Terrier\r\n
Cavalier King Charles Spaniel\r\n
Golden Retriever\r\n
West Highland White Terrier\r\n
Boxer\r\n
Border Terrier\r\n
Пример из Unix:
Pug\r
\n
Jack Russell Terrier\r
\n
English Springer Spaniel\r
\n
German Shepherd\r
\n
Staffordshire Bull Terrier\r
\n
Cavalier King Charles Spaniel\r
\n
Golden Retriever\r
\n
West Highland White Terrier\r
\n
Boxer\r
\n
Border Terrier\r
\n
- Стандартный способ открытия файла в python - это использование
open
- Важно закрывать файлы - open с with и без with
- Есть несколько модов работы с файлами
Характер | Значение |
---|---|
'r' |
Открыть для чтения (по умолчанию) |
'w' |
Открыть для записи, предварительно обрезав (перезаписав) файл |
'rb' или 'wb' |
Открыть в двоичном режиме (чтение/запись с использованием байтовых данных) - b говорит как раз о том, что мы работаем с байтовым файлом |
- существует несколько типов файловых объектов
- Текстовые файлы
- Буферизованные двоичные файлы
- Необработанные двоичные файлы
- Текстовые файлы возвращают:
>>> file = open('dog_breeds.txt')
>>> type(file)
<class '_io.TextIOWrapper'>
- Буферизованные двоичные файлы используются для работы с двоичными файлами:
>>> file = open('dog_breeds.txt', 'rb')
>>> type(file)
<class '_io.BufferedReader'>
>>> file = open('dog_breeds.txt', 'wb')
>>> type(file)
<class '_io.BufferedWriter'>
- Необработанные двоичные файлы обычно не используются:
>>> file = open('dog_breeds.txt', 'rb', buffering=0)
>>> type(file)
<class '_io.FileIO'>
- Методы работы для открытых файлов:
Метод | Что он делает |
---|---|
.read(size=-1) |
Это читает из файла в зависимости от количества size байты. Если аргумент не передан или None или -1 передается, затем читается весь файл. |
.readline(size=-1) |
Это читается максимум size количество символов в строке. Это продолжается до конца строки, а затем повторяется. Если аргумент не передан или None или -1 передается, затем считывается вся строка (или оставшаяся часть строки). |
.readlines() |
Это считывает оставшиеся строки из файлового объекта и возвращает их в виде списка. |
- Прочитать весь файл:
>>> with open('dog_breeds.txt', 'r') as reader:
>>> # Read & print the entire file
>>> print(reader.read())
Pug
Jack Russell Terrier
English Springer Spaniel
German Shepherd
Staffordshire Bull Terrier
Cavalier King Charles Spaniel
Golden Retriever
West Highland White Terrier
Boxer
Border Terrier
- Прочитать файл построчно с выводом только определенных символов:
with open(host_file,"r") as f:
print(f.readline(5))
print(f.readline(6))
print(f.readline(5))
print(f.readline(5))
print(f.readline(10))
name
= "bin
om10-
switc
herry.swee
- Прочитать файл построчно полностью (вывод аналогичен использованию
read
):
with open(host_file,"r") as f:
line = f.readline()
while line != '':
print(line, end='')
line = f.readline()
- Прочитать файл построчно полностью и вернуть список, в котором каждый элемент - отдельная строка:
with open(host_file,"r") as f:
for line in f.readlines():
print(line,end="")
- Упростить можно так:
with open(host_file,"r") as f:
for line in f:
print(line,end="")
-
end
используется для того, чтобы запретить Python добавлять новую строку в печатаемый текст и печатать только то, что находится в файле -
Данная запись запишет содержимое файла
host_file
в новыйtest_txt_file
, при этом содержимое последнего будет удалено:
with open(host_file, "r") as reader:
tf_content = reader.read()
with open(test_txt_file, "w") as writer:
for text in tf_content:
writer.write(text)