Как дозаписать файл в python
Я делаю телеграм-бота, и мне нужно записывать сообщения пользователя в файл txt. Но обычный метод .write() перезаписывает его, а мне это не нужно. Как дозаписать файл в python?
Отслеживать
задан 14 сен 2020 в 15:49
35 1 1 золотой знак 1 1 серебряный знак 5 5 бронзовых знаков
используйте open(filename, mode=»a») .
14 сен 2020 в 16:01
with open(‘file.txt’, ‘r+’) as f: f.seek(0, 2) f.write(‘blabla’) а там где f.seek 0 это номер буквы, а 2 строка? Или наоборот?
3 ноя 2021 в 8:54
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Вы можете открыть файл в режиме добавления open(‘. ‘, ‘a’) и использовать привычный .write() . В этом случае запись будет осуществляться в конец.
А вообще запись в файл и чтение из него производятся в позиции некоего «курсора». Каждое действие над содержимым файла перемещает этот курсор. И если файл открыт в режиме «чтение и обновление» ( ‘r+’ ), то можно переместить курсор в конец файла с помощью метода .seek() и записать что-то всё тем же .write() . Код, дописывающий строку в конце файла, будет выглядеть как-то так:
with open('file.txt', 'r+') as f: # . f.seek(0, 2) # перемещение курсора в конец файла f.write('blabla') # собственно, запись
Про метод seek можно почитать тут.
Как записать write() в файл Python
После изучения того, как открыть и закрыть файл в Python , откройте файл, тогда мы напишем в него случайный текст с помощью метода write() . Чтобы записать в файл в Python, нам нужно открыть его в записи «w» только для записи (существующий файл с тем же именем будет удален), добавьте «a» или эксклюзивное создание «x» . Поскольку мы не указывали режим, режим (по умолчанию) был установлен в r.
my_file = open("my_file.txt", "w") # Open a file my_file.write("This is my first line") # write a line to the file my_file.write("This is my second line") # write one more line to the file my_file.close() # close the file
После выполнения вышеуказанной программы мы видим, что файл создан на диске. При открытии файла мы можем видеть содержимое файла, на примерe:
This is my first lineThis is my second line
Это потому, что метод write() не добавляет символ новой строки (‘\ n’) в конец строки. Таким образом, вам нужно явно добавить ‘\ n’ для записи метода write().
my_file = open("my_file.txt", "w") # Open a file my_file.write("This is my first line\n") # write a line to the file my_file.write("This is my second line\n") # write one more line to the file my_file.close()
Теперь содержимое файла выглядит так:
This is my first line This is my second line
Использование оператора «with» является самым безопасным способом обработки файловой операции в Python, потому что оператор «with» гарантирует, что файл будет закрыт при выходе изнутри внутри блока.
with open("my_file.txt", "w") as my_file: my_file.write("This is my first line\n") # write a line to the file my_file.write("This is my second line\n") # write one more line to the file
Добавление данных в текстовый файл в Python
Вы также можете добавить новый текст к уже существующему файлу или новому файлу. Вам нужно открыть файл в режиме добавления, установив в качестве режима «a» или «ab» «a +». Когда вы открываете режим «a», позиция записи всегда будет в конце файла (добавление). Вы можете открыть «a +», чтобы разрешить чтение, поиск назад и чтение (но все записи все равно будут в конце файла).
with open("my_file.txt", "a") as my_file: my_file.write("This is my third line\n") # write a line to the file my_file.write("This is my fourth line\n") # write one more line to the file
После выполнения программы и открытия файла вы можете увидеть содержимое файла, наПример::
This is my first line This is my second line This is my third line This is my fourth line
Python Flush()
Метод flush() очищает внутренний буфер, как fflush stdio. Python использует буферизацию по умолчанию операционной системы, если вы не настроили ее иначе. Python автоматически удаляет файлы при их закрытии. Но вы также можете принудительно сбросить буфер в файл программным способом с помощью метода flush() .
with open("my_file.txt", "w+") as my_file: my_file.write("This is my first line \n") # do some work str = "This is my second line" my_file.write(str) my_file.write('\n') my_file.flush() # some other work my_file.write("This is my third line \n") my_file.flush()
Написание текста Unicode в текстовый файл в Python
Стандарт Unicode описывает, как символы представлены кодовыми точками . Кодовая точка представляет собой целочисленное значение, обычно обозначаемое в базе 16 . Python представляет строки Unicode как 16- или 32-битные целые числа, в зависимости от того, как был скомпилирован интерпретатор Python. Лучшая практика, в общем, использует UTF-8 для записи в файлы.
encoding = "utf-8"
UTF-8 является самым современным и универсально использоваться для кодирования и она работает во всех браузерах, большинство текстовых редакторов и большинство терминалов / оболочек.
import io str = u'\u5E73\u621015' with io.open("my_file.txt", "w+", encoding="utf-8") as my_file: my_file.write(str)
В качестве альтернативы вы можете использовать модуль кодеков . Низкоуровневые процедуры для регистрации и доступа к доступным кодировкам находятся в модуле кодеков. Точка кода представляет собой целое значение, как правило , обозначена в базе 16. Наиболее часто используемая частью модуля кодеков является codecs.open() функцией.
import codecs str = u'\u5E73\u621015' with codecs.open("my_file.txt", "w+", encoding="utf-8") as my_file: my_file.write(str)
Запись и чтение — Python: Основы текстового ввода-вывода
Давайте откроем файл на запись, запишем в него текст и закроем файл. Метод write записывает строку в файл без какой-либо дополнительной обработки:
f = open("foo.txt", "w") f.write('Hello\nWorld!') # 12 f.close()
Здесь «w» означает режим «запись» (write), а 12 сообщает о количестве символов, которые мы записали в файл соответствующим вызовом write .
Теперь откроем файл в режиме чтения и прочитаем всё содержимое:
f = open("foo.txt", "r") # "r" — чтение, read f.read() # 'Hello\nWorld!' f.close()
Ура, мы прочитали ровно то, что записали до этого.
Позиция в файле
Вызывать метод write можно несколько раз. Каждый раз мы получим в ответ кол-во символов, которое записали. Текст же будет накапливаться. Так происходит потому, что вызов метода write перемещает так называемую текущую позицию в файле в его (файла) конец.
read тоже учитывает текущую позицию: читает текст от неё и до конца файла. Методу можно явно сказать, сколько символов должно быть прочитано — в этом случае метод постарается прочитать указанное количество символов, если таковых хватает в файле. В любом случае вызов метода read перемещает позицию в то место, где закончилось чтение.
При открытии файла текущая позиция всегда указывает на первый символ текста (т.е. равна нулю). А при прочтении файла до конца с помощью вызова метода read без параметров позиция перемещается в конец файла и последующие чтения ничего не дают:
f = open("foo.txt", "r") # "r" — чтение, read f.read() # 'Hello\nWorld!' f.read() # '' f.close()
Позицию в файле можно изменять и вручную. Для этого используется метод seek , о котором вы можете почитать в документации .
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Чтение и запись файлов в Python
Чтение и запись файлов в Python, является одной из часто используемых задач. При работе вашей программы, вам довольно часто придется производить запись или чтение из файлов. В этой статье, мы разберем открытие файла, чтение, запись, и закрытие. Рассмотрим различные методы работы с файлами.
Открытие файлов в Python
Python по умолчанию предоставляет нам функцию open() , которая предназначена для открытия файла. Рассмотрим пример использования данной функции.
file = open("text.txt") # Открытие файла file = open("C:/text.txt") #Открытие файла по его пути
Существует несколько режимов открытия файла, r — для чтения, w — для записи, a — для добавления. По умолчанию Python использует режим чтение файла
| Режим | Описание |
| r | Открывает файл для чтения. (по умолчанию) |
| w | Открывает файл для записи. Создает новый файл, если он не существует, или усекает файл, если он существует. |
| x | Открывает файл для эксклюзивного создания. Если файл уже существует, операция завершается неудачей. |
| a | Открывает файл для добавления в конце файла без его усечения. Создает новый файл, если он не существует. |
| t | Открывается в текстовом режиме. (по умолчанию) |
| b | Открывается в двоичном режиме. |
| + | Открывает файл для обновления (чтения и записи) |
Режим открытия указывается следующим образом:
f = open("text.txt") #Режим r по умолчанию f = open("text.txt", "w")# Режим записи в файл f = open("text.txt", "a") # Режим добавления
Кроме того, надо учитывать кодировку файла, по умолчанию кодировка зависит от вашей операционной системы. Для Windows, кодировка cp1251 , а для Linux utf — 8 . Соответственно, что бы наша программа вела себя одинаково на разных платформах, лучшим решением будет указание явной кодировки.
file = open("text.txt", "r", encoding = "utf-8" )
Закрытие файла в Python
После того, как мы открыли файл, и выполнили все нужные операции, нам необходимо его закрыть. Для закрытия файла используется функция close() .
file = open("text.txt", "r", encoding = "utf-8" ) file.close()
Вышеописанный код, это всего лишь пример работы с файлами, мы не должны забывать, что в ходе работы нашей программы, может произойти что то непредвиденное. Для таких случаев мы используем блок исключений try…finally , о котором мы говорим чуть позже. Ниже пример, с блоком исключений:
try: file = open("text.txt", "r", encoding = "utf-8" ) finally: file.close()
Данная конструкция, гарантирует нам правильное закрытие файла, даже если произойдет ошибка в ходе работы нашей программы.
Лучшим же методом правильного закрытия файла, является конструкция with . Данная конструкция гарантирует нам правильное закрытие файла.
with open("text.txt", "r", encoding = "utf-8" ) as file:
Запись в файл Python
При записи в файл, мы должны открывать наш файл в режим записи w или a . При записи в файл будьте осторожны, режим w перезапишет ваш файл, а режим a добавит новую строку. Запись строк осуществляется с помощью функции write() .
with open("text.txt", "r", encoding = "utf-8" ) as file: file.write("Моя первая запись\n") file.write("Еще немного\n")
Приведенный выше код, создаст новый файл text.txt , если его не существует, если существует, то она будет перезаписана. При записи не забывайте про символ переноса на новую строку \n .
Чтение файлов в Python
Что бы открыть файл для чтения, мы используем режим r . Для чтения мы воспользуемся функцией read(size) , если параметр size не указан, функция вернет нам всю строку.
file = open("text.txt",'r', encoding = 'utf-8') file.read(3) file.read() Результат: "Моя" "Моя первая запись"
Для чтение содержимого всего файла построчно, мы можем воспользоваться циклом for.
for line in file: print(line,end='') Результат: Моя первая запись Еще немного
Методы работы с файлами
| Методы | Описание |
| close() | Закрывает открытый файл. |
| detach() | |
| fileno() | Возвращает целое число (файловый дескриптор) файла. |
| flush() | Сбрасывает буфер записи потока файлов. |
| isatty() | ВОЗВРАТ True если файловый поток является интерактивным. |
| read(n) | Читает самое большее n символы из файла. Читает до конца файла, если он отрицательный или None. |
| readable() | ВОЗВРАТ True если файловый поток можно прочитать. |
| readline(n=-1) | Считывает и возвращает одну строку из файла |
| readlines(n=-1) | Считывает и возвращает список строк из файла |
| seek(offset,from=SEEK_SET) | |
| seekable() | ВОЗВРАТ True если файловый поток поддерживает произвольный доступ. |
| tell() | Возвращает текущее местоположение файла. |
| truncate(size=None) | Изменяет размер потока файлов следующим образом size байты. Если size не указан, изменяет размер до текущего местоположения. |
| writable() | ВозвращаетTrue, если файловый поток может быть записан. |
| write(s) | Записывает строку sв файл и возвращает количество записанных символов. |
| writelines(lines) | Записывает список lines в файл. |
