Работа с файлами в Python. Чтение и запись
Файл — это контейнер для хранения данных. Когда мы хотим читать из файла или записывать в него, нам нужно сначала его открыть. После того, как мы закончили чтение/запись, нам нужно закрыть файл, чтобы освободить ресурсы, связанные с ним.
Таким образом, в Python операции с файлами выполняются в следующем порядке:
чтение или запись;
Открыть файл в Python
В Python для открытия файлов используется метод open(). Например, у нас есть файл test.txt со следующим содержимым:
Теперь попробуем открыть этот файл с помощью функции open():
# Открываем файл в текущем каталоге
file1 = open ( «test.txt» )
Здесь мы создали файловый объект с именем file1 . Его можно использовать для работы с файлами и каталогами.
По умолчанию файлы открыты в режиме чтения (не могут быть изменены). Вышеприведенный код равнозначен:
file1 = open ( «test.txt» , «r» )
Здесь «r» означает, что файл открыт для чтения.
| Режим | Описание |
| r | Открыть файл для чтения. (используется по умолчанию) |
| w | Открыть файл для записи. Создает новый файл, если он не существует, или удаляет содержимое файла, если он существует. |
| x | Открыть файл для эксклюзивного создания. Если файл уже существует, операция завершится неудачно. |
| a | Открыть файл для добавления данных в конец файла без удаления текущего содержимого. Создает новый файл, если он не существует. |
| t | Открыть файл в текстовом режиме. (используется по умолчанию) |
| b | Открыть файл в двоичном режиме. |
| + | Открыть файл для обновления (чтение и запись). |
Вот несколько простых примеров того, как открыть файл в разных режимах:
file1 = open ( «test.txt» ) # равнозначен ‘r’ или ‘rt’
file1 = open ( «test.txt» , ‘w’ ) # запись в текстовом режиме
file1 = open ( «img.bmp» , ‘r+b’ ) # чтение и запись в двоичном режиме
Чтение файлов в Python
В Python для чтения файлов используется метод read(). Например:
# Открываем файл
file1 = open ( «test.txt» , «r» )
# Читаем файл
read_content = file1 . read ( )
print ( read_content )
This is a test file.
Hello from the test file.
Обратите внимание на строку:
read_content = file1 . read ( )
Здесь file1.read() читает файл test.txt и сохраняет его в переменную read_content .
Закрыть файл в Python
Когда мы закончили выполнять операции с файлом, нам нужно его правильно закрыть. Закрытие файла освобождает ресурсы, которые были задействованы для работы с ним. Это делается с помощью метода close(). Например:
# Открываем файл
file1 = open ( «test.txt» , «r» )
# Читаем файл
read_content = file1 . read ( )
print ( read_content )
# Закрываем файл
file1 . close ( )
This is a test file.
Hello from the test file
Здесь мы использовали метод close() для закрытия файла. После выполнения операции с файлом мы всегда должны закрывать файл; это важный момент.
Обработка исключений в файлах
Если во время выполнения какой-либо операции с файлом возникает исключение, программа завершает свое выполнение, не закрывая при этом файлы. Одним из решений является использование блока try. finally .
file1 = open ( «test.txt» , «r» )
read_content = file1 . read ( )
print ( read_content )
# закрываем файл
file1 . close ( )
Здесь мы закрыли файл в блоке finally , поскольку блок finally всегда выполняется, то файл будет закрыт, даже если выбросится исключение.
Использование синтаксиса with…open
В Python мы можем использовать синтаксис with. open для автоматического закрытия файла. Например:
with open ( «test.txt» , «r» ) as file1 :
read_content = file1 . read ( )
print ( read_content )
Примечание: Поскольку в данном варианте не нужно беспокоиться о закрытии файла, рекомендуется всегда использовать синтаксис with. open .
Запись в файл в Python
При записи в файл необходимо помнить две вещи:
Если мы пытаемся открыть несуществующий файл, создается новый файл.
Если файл уже существует, его содержимое удаляется, а в файл добавляется новое содержимое.
Для того чтобы записать данные в файл в Python, нам нужно открыть его в режиме записи, указав «w» в функции open() в качестве второго аргумента.
Предположим, у нас нет файла с именем test2.txt. Давайте посмотрим, что произойдет, если мы выполним запись в файл test2.txt:
with open ( ‘test2.txt’ , ‘w’ ) as file2 :
# Выполняем запись в файл test2.txt
file2 . write ( ‘Programming is Fun.’ )
file2 . write ( ‘Python for beginners’ )
Здесь создается новый файл test2.txt с содержимым, указанным внутри методов write():
Методы для работы с файлами в Python
| Метод | Описание |
| close() | Закрывает открытый файл. Ничего не происходит, если файл уже закрыт. |
| detach() | Отделяет базовый двоичный буфер от TextIOBase и возвращает его. |
| fileno() | Возвращает целое число файла (файловый дескриптор). |
| flush() | Очищает буфер записи в файловом потоке. |
| isatty() | Возвращает True, если поток файлов является интерактивным. |
| read(n) | Считывает не более n символов из файла. Выполняет чтение до конца файла, если n является отрицательным или None. |
| readable() | Возвращает True, если из файлового потока можно считать данные. |
| readline(n=-1) | Считывает и возвращает одну строку из файла. Считывает не более n байт, если указано. |
| readlines(n=-1) | Считывает и возвращает список строк из файла. Считывает не более n байт/символов, если указано. |
| seek(offset,from=SEEK_SET) | Изменяет позицию файла на offset байтов, относительно from (start, current, end). |
| seekable() | Возвращает True, если файловый поток поддерживает произвольный доступ. |
| tell() | Возвращает целое число, представляющее текущую позицию файлового объекта. |
| truncate(size=None) | Изменяет размер файлового потока до size байт. Если размер не указан, размер изменяется относительно текущего местоположения. |
| writable() | Возвращает True, если в файловый поток можно выполнить запись. |
| write(s) | Записывает строку (s) в файл и возвращает количество записанных символов. |
| writelines(lines) | Записывает список строк (lines) в файл. |
Запись данных в файл
21 августа 2013 г.
Archy
Просмотров: 88540
RSS
7
Python для начинающих » Общие вопросы
замена определенной строки в файле python, запись в файл python, копирование файла python, отчистка файла python, редактирование файла python

Как осуществить чтение из файла мы обсудили в прошлой статье. В данной статье мы обсудим способы записи данных в файл. Чтобы не было ошибки из за доступа, убедитесь, что в папке где вы хотите выполнить изменения или сам файл имеют права 777.
Чтобы не соскучится, мы покажем несколько способов внесения данных в файл и наглядно увидим результат. Чтобы открыть файл для записи или же создать его, мы воспользуемся функцией open(filename, mod) и в качестве второго параметрам mod укажем значение w т.е. (write) запись. Если файл с указанным названием filename не существует — он будет создан.
Создаем новый файл в Python
# -*- coding: utf-8 -*- my_file = open('snake.txt', 'w') # Закрываем файл my_file.close()
После выполнения данного скрипта, по указанному нами пути будет создан новый файл snake.txt если файл не был создан то нужно проверить права доступа на папку. Стоит учесть, что если файл snake.txt существовал ранее, то после открытия его функцией open() и мод W, тогда содержимое файла удаляется. Если вы хотите добавить что-то в конце, то следует использовать мод ‘a+’.
Запись данных в файл Python
Предположим, что мы создали новый файл и хотим в него внести некий текст, для этого воспользуемся методом write().
# -*- coding: utf-8 -*- my_file = open('snake.txt', 'w') text_for_file = 'Some text here. ' my_file.write(text_for_file) my_file.close()
Можно выполнять запись и изменения в любые типы файлов с которыми хотите работать. Ограничение на манипуляцию файлов в зависимости от его типа нету, данные функции имеют полный контроль над файлами, конечно, если администратор выделил файлу нужные права.
Заменяем данные из определенной строки файла
Если требуется замена данных из файла на определенной его строке, то для этого понадобятся методы readlines() и writelines(). Нам предстоит открыть построчно файл, заменить нужную строку и сохранить файл в такой очередности в которой находятся значения в списке.
Изначальный файл snake.txt
Я Программа написанная в Python 3
Заменяем 5-ю строку со значением ‘Python’ на значение ‘Питон’
# -*- coding: utf-8 -*- # Открываем файл только для чтения f = open('snake.txt', 'r') lines = f.readlines() lines[4] = 'Питон' + '\n' # Закрываем файл f.close() # Открываем файл для записи save_changes = open('snake.txt', 'w') # Сохраняем список строк save_changes.writelines(lines) # Закрываем файл save_changes.close()
Финальный вид файла snake.txt
Я Программа написанная в Питон 3
Копирование файлов в Python
Как осуществить копирование файлов, мы обсуждали в прошлой статье. Но, можно копировать файлы без использования каких либо библиотек или модулей. В примере мы будем копировать изображения из одной папки в другую.
# -*- coding: utf-8 -*- # Открываем файл только для чтения old_image = open('temp/pro.jpeg', 'r').read() # Создаем новый файл new_image = open('new_pro.jpeg', 'w') # Сохраняем данные старой картинки в новую new_image.write(old_image) new_image.close()
По дороге к работе где вы отлично программируйте на пайтоне случилось непредсказуемое и вы попали в небольшое дтп и некому вытащить вашу машину из беды? Рекомендую отличный эвакуатор который вытащит из любой ситуации вашего железного коня, может даже и подбросит до работы.
Еще записи по теме
- Игровой автомат Lucky Haunter — в казино Плей Фортуна по крупному выиграй
- Почему программисты используют Python?
- Взаимодействие с Интернетом. Разбор URL-адреса в Python
- Как осуществляется поддержка Python?
- Игровой автомат Vikings Go Berzerk — на официальный сайт вулкан играть выгодно
- Лучшие примеры лендинг пейдж в мире
- Администрирование сайтов — Нужно ли?
[python] Как записать в файл байты?
У меня есть несколько integer’ов. Как мне их записать в файл их реальное представление в памяти (байты), а не текстовое?

bk_ ★★
28.11.10 00:38:49 MSK
import struct binfile = open('bin.dat', 'wb') for num in range(50): data = struct.pack('i', num)
hizel ★★★★★
( 28.11.10 01:03:55 MSK )
Ответ на: комментарий от hizel 28.11.10 01:03:55 MSK

>import struct
for num in range(50):
data = struct.pack(‘i’, num)
Сколько ни смотрел — так и не нашел, где собственно производится запись в файл.
То ли этот ваш пайтон такой сложный, то ли я такой тупой 🙁
nnz ★★★★
( 28.11.10 01:15:22 MSK )
Ответ на: комментарий от nnz 28.11.10 01:15:22 MSK
hizel ★★★★★
( 28.11.10 01:40:33 MSK )

что значит «реально представление»?
Я думаю, реальное представление интежера в питоне это целый объект, с меткой типа, метаинформацией и прочим. Т.е. это не просто «байты».
И даже если были бы просто байты — стоял бы как минимум вопрос об endianness.
Love5an
( 28.11.10 02:51:36 MSK )
Ответ на: комментарий от Love5an 28.11.10 02:51:36 MSK
и чо ? Человек хочет инт записать как есть, тебе не пофиг на ендианес(если он в питоновском представлении инта есть вообще)
Jetty ★★★★★
( 28.11.10 02:55:54 MSK )
Ответ на: комментарий от Jetty 28.11.10 02:55:54 MSK

в питоне нету никакого инта «как есть».
Love5an
( 28.11.10 03:38:15 MSK )
>их реальное представление в памяти
А может тебе нужен будет pickle?
anonymous
( 28.11.10 03:45:12 MSK )
Ответ на: комментарий от anonymous 28.11.10 03:45:12 MSK
Да аноним прав для таких целей весьма хорош pickle
pylin ★★★★★
( 28.11.10 12:19:55 MSK )
Ответ на: комментарий от hizel 28.11.10 01:03:55 MSK

bk_ ★★
( 28.11.10 15:24:40 MSK ) автор топика
Ответ на: комментарий от pylin 28.11.10 12:19:55 MSK
Нет, аноним ошибается. Нет таких вещей, для которых хорош pickle.
shylent ★
( 28.11.10 17:03:05 MSK )
Ответ на: комментарий от Love5an 28.11.10 03:38:15 MSK
Я вам открою страшную тайну — инта «как есть» нет нигде. Всегда могут быть варианты представления (тот же endianness).
shylent ★
( 28.11.10 17:18:34 MSK )
Ответ на: комментарий от shylent 28.11.10 17:03:05 MSK
>Нет, аноним ошибается. Нет таких вещей, для которых хорош pickle.
Аноним, имхо, прав. Потому что pickle позволяет легко записать питоновский объект и получить обратно питоновский же объект.
Ведь аноним предположил, что автору не нужно именно записывать «чистые» данные, а ему хочется просто записать и потом прочитать сразу в питоновский объект.
anonymous
( 28.11.10 17:29:52 MSK )
Ответ на: комментарий от anonymous 28.11.10 17:29:52 MSK
Видите ли, уважаемый аноним, это больше идеологический вопрос, нежели чисто технический. Я не буду смущать вас подробностями реализации pickle/cpickle (а также недостатками этой реализации) — об этом и о многом другом вы можете прочитать в документации python, но, если совсем кратко, то pickle сериализует код, тогда как тут речь идет, все же, о хранении данных.
Я считаю, что в 99.9% случаев, при необходимости «сохранить» какие-либо данные, следует воспользоваться соответствующим ситуации методом сериализации, например, записать данные «просто в файл» (в виде текста или binary через struct), sqlite, xml/json/yaml и т.д. Способов достаточно.
shylent ★
( 28.11.10 19:10:16 MSK )

Реальное представление объекта в памяти — pickle.
То, что ты называешь реальным представлением int’ов в памяти — struct.
tia ★
( 28.11.10 19:13:14 MSK )
Ответ на: комментарий от shylent 28.11.10 19:10:16 MSK
>Я считаю, что в 99.9% случаев, при необходимости «сохранить» какие-либо данные, следует воспользоваться соответствующим ситуации методом сериализации, например, записать данные «просто в файл» (в виде текста или binary через struct), sqlite, xml/json/yaml и т.д. Способов достаточно.
Тут скорее вопрос в том, для чего их надо сохранять. По мне так в pure-python программе проще всего именно pickle — уж очень ненапряжно с ним работать, если не пытаться мучать сильно навороченные объекты. Положил в файл, а потом прочитал — и сразу можно пользоваться результатом, без парсинга, разборов байтов и прочего.
Естественно, если цель не «быстрое использование», а что-то более сложное, то pickle тут не подходит.
Осваиваем Python 3 — работа с файлами
В этой статье мы рассмотрим операции с файлами в Python. Открытие файла Python. Чтение из файла Python. Запись в файл Python, закрытие файла. А также методы, предназначенные для работы с файлами.
Работа с файлами питон — что такое файл Python?
Файл – это именованная область диска, предназначенная для длительного хранения данных в постоянной памяти (например, на жёстком диске).
Чтобы прочитать или записать данные в файл, сначала нужно его открыть. После окончания работы файл необходимо закрыть, чтобы освободить связанные с ним ресурсы.
Поэтому в Python операции с файлами выполняются в следующем порядке:
- Открытие файла Python.
- Чтение из файла Python или запись в файл Python (выполнение операции).
- Закрытие файла Python.
Открытие файла Python
Не знаете как открыть файл в питоне? В Python есть встроенная функция open(), предназначенная для открытия файла. Она возвращает объект, который используется для чтения или изменения файла.
>>> f = open("test.txt") # открыть файл в текущей папке >>> f = open("C:/Python33/README.txt") # указание полного пути
При этом можно указать необходимый режим открытия файла: ‘r’- для чтения,’w’ — для записи,’a’ — для изменения. Мы также можем указать, хотим ли открыть файл в текстовом или в бинарном формате.
По умолчанию файл открывается для чтения в текстовом режиме. При чтении файла в этом режиме мы получаем строки.
В бинарном формате мы получим байты. Этот режим используется для чтения не текстовых файлов, таких как изображения или exe-файлы.
| Открытие файла Python- возможные режимы | |
| Режим | Описание |
| ‘r’ | Открытие файла для чтения. Режим используется по умолчанию. |
| ‘w’ | Открытие файла для записи. Режим создаёт новый файл, если он не существует, или стирает содержимое существующего. |
| ‘x’ | Открытие файла для записи. Если файл существует, операция заканчивается неудачей (исключением). |
| ‘a’ | Открытие файла для добавления данных в конец файла без очистки его содержимого. Этот режим создаёт новый файл, если он не существует. |
| ‘t’ | Открытие файла в текстовом формате. Этот режим используется по умолчанию. |
| ‘b’ | Открытие файла в бинарном формате. |
| ‘+’ | Открытие файла для обновления (чтения и записи). |
f = open("test.txt") # эквивалент 'r' или 'rt' f = open("test.txt",'w') # запись в текстовом режиме f = open("img.bmp",'r+b') # чтение и запись в бинарном формате
В отличие от других языков программирования, в Python символ ‘a’ не подразумевает число 97, если оно не закодировано в ASCII (или другой эквивалентной кодировке).
Кодировка по умолчанию зависит от платформы. В Windows – это ‘cp1252’, а в Linux ‘utf-8’.
Поэтому мы не должны полагаться на кодировку по умолчанию. При работе с файлами в текстовом формате рекомендуется указывать тип кодировки.
f = open("test.txt",mode = 'r',encoding = 'utf-8')
Как закрыть файл в Python?
Закрытие освободит ресурсы, которые были связаны с файлом. Это делается с помощью метода close(), встроенного в язык программирования Python.
В Python есть сборщик мусора, предназначенный для очистки ненужных объектов, Но нельзя полагаться на него при закрытии файлов.
f = open("test.txt",encoding = 'utf-8') # выполнение операций с файлом f.close()
Этот метод не полностью безопасен. Если при операции возникает исключение, выполнение будет прервано без закрытия файла.
Более безопасный способ – использование блока try. finally.
try: f = open("test.txt",encoding = 'utf-8') # выполнение операций с файлом finally: f.close()
Это гарантирует правильное закрытие файла даже после возникновения исключения, прерывающего выполнения программы.
Также для закрытия файла можно использовать конструкцию with. Оно гарантирует, что файл будет закрыт при выходе из блока with. При этом не нужно явно вызывать метод close(). Это будет сделано автоматически.
with open("test.txt",encoding = 'utf-8') as f: # выполнение операций с файлом
Запись в файл Python
Чтобы записать данные в файл в Python, нужно открыть его в режиме ‘w’, ‘a’ или ‘x’. Но будьте осторожны с режимом ‘w’. Он перезаписывает файл, если то уже существует. Все данные в этом случае стираются.
Запись строки или последовательности байтов (для бинарных файлов) осуществляется методом write(). Он возвращает количество символов, записанных в файл.
with open("test.txt",'w',encoding = 'utf-8') as f: f.write("my first filen") f.write("This filenn") f.write("contains three linesn")
Эта программа создаст новый файл ‘test.txt’. Если он существует, данные файла будут перезаписаны. При этом нужно добавлять символы новой строки самостоятельно, чтобы разделять строки.
Чтение из файла Python
Чтобы осуществить чтение из файла Python, нужно открыть его в режиме чтения. Для этого можно использовать метод read(size), чтобы прочитать из файла данные в количестве, указанном в параметре size. Если параметр size не указан, метод читает и возвращает данные до конца файла.
>>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4) # чтение первых 4 символов 'This' >>> f.read(4) # чтение следующих 4 символов ' is ' >>> f.read() # чтение остальных данных до конца файла 'my first filenThis filencontains three linesn' >>> f.read() # дальнейшие попытки чтения возвращают пустую строку ''
Метод read() возвращает новые строки как ‘n’. Когда будет достигнут конец файла, при дальнейших попытках чтения мы получим пустые строки.
Чтобы изменить позицию курсора в текущем файле, используется метод seek(). Метод tell() возвращает текущую позицию курсора (в виде количества байтов).
>>> f.tell() # получаем текущую позицию курсора в файле 56 >>> f.seek(0) # возвращаем курсор в начальную позицию 0 >>> print(f.read()) # читаем весь файл This is my first file This file contains three lines
Мы можем прочитать файл построчно в цикле for.
>>> for line in f: . print(line, end = '') . This is my first file This file contains three lines
Извлекаемые из файла строки включают в себя символ новой строки ‘n’. Чтобы избежать вывода, используем пустой параметр end метода print(),.
Также можно использовать метод readline(), чтобы извлекать отдельные строки. Он читает файл до символа новой строки.
>>> f.readline() 'This is my first filen' >>> f.readline() 'This filen' >>> f.readline() 'contains three linesn' >>> f.readline() ''
Метод readlines() возвращает список оставшихся строк. Все эти методы чтения возвращают пустую строку, когда достигается конец файла.
>>> f.readlines() ['This is my first filen', 'This filen', 'contains three linesn']
Python работа с файлами — основные методы
Ниже приводится полный список методов для работы с файлами в текстовом режиме.
| Python работа с файлами — методы | |
| Метод | Описание |
| close() | Закрытие файла. Не делает ничего, если файл закрыт. |
| detach() | Отделяет бинарный буфер от TextIOBase и возвращает его. |
| fileno() | Возвращает целочисленный дескриптор файла. |
| flush() | Вызывает сброс данных (запись на диск) из буфера записи файлового потока. |
| isatty() | Возвращает значение True, если файловый поток интерактивный. |
| read(n) | Читает максимум n символов из файла. Читает до конца файла, если значение отрицательное или None. |
| readable() | Возвращает значение True, если из файлового потока можно осуществить чтение. |
| readline(n=-1) | Читает и возвращает одну строку из файла. Читает максимум n байт, если указано соответствующее значение. |
| readlines(n=-1) | Читает и возвращает список строк из файла. Читает максимум n байт/символов, если указано соответствующее значение. |
| seek(offset,from=SEEK_SET) | Изменяет позицию курсора. |
| seekable() | Возвращает значение True, если файловый поток поддерживает случайный доступ. |
| tell() | Возвращает текущую позицию курсора в файле. |
| truncate(size=None) | Изменяет размер файлового потока до size байт. Если значение size не указано, размер изменяется до текущего положения курсора. |
| writable() | Возвращает значение True, если в файловый поток может производиться запись. |
| write(s) | Записывает строки s в файл и возвращает количество записанных символов. |
| writelines(lines) | Записывает список строк lines в файл. |
