Как дописать в файл python
Перейти к содержимому

Как дописать в файл python

  • автор:

Как дозаписать файл в 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 можно почитать тут.

Как дописывать в файл?

Как дописывать файл
Всем привет. Подскажите пожалуйста, мне нужно переменную постоянно дописывать новой строкой в.

Как дописывать строки в файл? (не получается)
Делаю так: Dim fso, f Set fso = CreateObject(‘Scripting.FileSystemObject’) TFile =.

Как дописывать данные программы в файл?
Ребят подскажите пожалуйста! 1) Как указать путь к програмульке? 2) Как сделать чтобы файл не.

Как дописывать в файл с новой строки?
<?php error_reporting(-1); header(‘Content-Type: text/html; charset= utf-8’); function.

Регистрация: 03.01.2009
Сообщений: 42

Лучший ответ

Сообщение было отмечено Рыжий Лис как решение

Решение

f = open('file.txt' , 'a') #дозапись в файл

‘a’ открытие на дозапись, информация добавляется в конец файла.
Регистрация: 01.03.2013
Сообщений: 68

ЦитатаСообщение от yanita Посмотреть сообщение

f = open('file.txt' , 'a') #дозапись в файл

‘a’ открытие на дозапись, информация добавляется в конец файла.
4527 / 3521 / 358
Регистрация: 12.03.2013
Сообщений: 6,038
Регистрация: 01.04.2017
Сообщений: 118
Не в ту ветку ответил
Регистрация: 12.05.2019
Сообщений: 1

А что писать после f = open(«блаблабла», «a»)?
Типо, f.write и т.п?

Добавлено через 7 минут
А, понял. Write.

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

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

[РЕШЕНО] Как дописывать строки в файл в FatFS?
устройство на Stm32 использую fatfs чена. Если использую f_puts добавляется строка, но то что было.

Командный файл: дописывать в файл текст, удалять строки
Разработать командный файл, который в интерактивном режиме (командный файл «задает вопросы», а.

Запись в текстовый файл — не хочет дописывать строки
В чем ошибка? Указывает на "rewrite" procedure TForm1.Button1Click(Sender: TObject); begin .

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

Классы С++, работа с файлами. Дописывать каждый раз в файл информацию и выводить её
В моём случае выводится текущий массив, результат примера и предыдущий вводимый массив и результат.

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

Файлы. Работа с файлами.

Python 3 логотип

В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.

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

У функции open много параметров, они указаны в статье "Встроенные функции", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
Режим Обозначение
‘r’ открытие на чтение (является значением по умолчанию).
‘w’ открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
‘x’ открытие на запись, если файла не существует, иначе исключение.
‘a’ открытие на дозапись, информация добавляется в конец файла.
‘b’ открытие в двоичном режиме.
‘t’ открытие в текстовом режиме (является значением по умолчанию).
‘+’ открытие на чтение и запись

Режимы могут быть объединены, то есть, к примеру, ‘rb’ — чтение в двоичном режиме. По умолчанию режим равен ‘rt’.

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

Чтение из файла

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

Первый — метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).

Ещё один способ сделать это — прочитать файл построчно, воспользовавшись циклом for:

Запись в файл

Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:

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

 Запись в файл осуществляется с помощью метода write:
 

После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:

 Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.
   Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.

Для вставки кода на Python в комментарий заключайте его в теги

  • Модуль csv - чтение и запись CSV файлов
  • Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
  • Онлайн-обучение Python: сравнение популярных программ
  • Книги о Python
  • GUI (графический интерфейс пользователя)
  • Курсы Python
  • Модули
  • Новости мира Python
  • NumPy
  • Обработка данных
  • Основы программирования
  • Примеры программ
  • Типы данных в Python
  • Видео
  • Python для Web
  • Работа для Python-программистов
  • Сделай свой вклад в развитие сайта!
  • Самоучитель Python
  • Карта сайта
  • Отзывы на книги по Python
  • Реклама на сайте

Запись файлов

Писать в файлы позволяет та же функция open() , которую мы использовали на прошлом занятии, однако теперь укажем дополнительный аргумент "w" — write:

>>> with open("referats.txt", "w", encoding="utf-8") as f: # файл открыт . # Записываем строку в файл, "\n" - символ переноса строки . f.write("Используются тексты с Яндекс.Рефератов https://yandex.ru/referats/\n") . # Запишем в файл еще одну строку . f.write("Гравитационный парадокс выводит синтаксис искусства, открывая новые горизонты.\n") 

Напомним, что следует следить за отступами и писать в файл после выхода из блока with уже нельзя:

>>> with open("function.txt", "w", encoding="utf-8") as f: . f.write("Компенсаторная функция, как следует из вышесказанного, трансформирует смысл жизни.\n") >>> if not f.writable: . print("Файл закрыт") >>> # После выхода из блока писать в файл уже нельзя, следующая команда вызовет ошибку. Как всегда следите за отступами! >>> f.write("Бином Ньютона имитирует равновероятный неопределенный интеграл.\n") 

Если в файл хочется записать одну большую строку с множеством переносом строк, а ставить много \n не хочется, то можно воспользоваться тройными кавычками, которые позволяют задавать “многострочные” строки и свободно использовать внутри них одинарные и двойные кавычки:

>>> text = """Альтиметр редуцирует лазерный ньютонометр. Как отмечает А.А.Потебня, . "строфоид" начинает период. Необходимым и достаточным условием отрицательности . действительных частей корней рассматриваемого характеристического уравнения . является то, что гироскопический прибор преобразует цикл. Действительно, . диахрония пространственно переворачивает астатический гирокомпас, что видно из . уравнения кинетической энергии ротора. Погрешность изготовления неумеренно . определяет резкий кинетический момент. Слово, несмотря на некоторую . погрешность, поступательно диссонирует подвес. Апостроф' порождает неопределенность. . """ >>> with open("multiline.txt", "w", encoding="utf-8") as f: . f.write(text) 

Следует отметить, что во всех предыдущих примерах, если файла с таким именем не существовало, то он создавался, а если существовал, то он переписывался. Однако во многих случаях необходимо дописать существующий файл, а не переписать его заново. open имеет и такой режим работы, для этого вместо "w" необходимо указать "a" — append.

>>> text = """Экситон не входит своими составляющими, что очевидно, . в силы нормальных реакций связей, так же как и межатомный ПИГ, . составляя уравнения Эйлера для этой системы координат. . """ >>> # Создаем новый файл >>> with open("physics.txt", "w", encoding="utf-8") as f: . f.write(text) >>> >>> # Теперь файл закрыт. Перепишем его >>> >>> # Стираем старый файл, создаем новый с тем же именем и открываем его для записи: >>> with open("physics.txt", "w", encoding="utf-8") as f: . f.write("При погружении в жидкий кислород фотон искажает разрыв.\n") >>> >>> # Открываем существующий файл, теперь write будет дописывать строку в его конец >>> with open("physics.txt", "a", encoding="utf-8") as f: . f.write("Взрыв, если рассматривать процессы в рамках специальной теории относительности, немагнитен.\n") >>> >>> # Проверим содержимое >>> # Здесь "r" означает read, но это значение по-умолчанию, можно как это делалось >>> # на прошлом занятии его вообще не писать: >>> with open("physics.txt", "r", encoding="utf-8") as f: . first_line = f.readline() # читаем первыую строку . # Проверяем, что строка начинается с данной подстроки: . if first_line.startswith("При погружении в жидкий"): . print("От экситона не осталось и следа") . second_line = f.readline().strip() # читаем вторую строку и отрезаем ей \n . if second_line.endswith("теории относительности, немагнитен."): . print("Относительность относительна") 

Чтение файлов построчно

Иногда бывает такое, что файлы очень большие и прочитать их целиком совсем никак не получается. Что, если вам нужно прочитать файл на 16 миллиардов строк, который весит десятки терабайт?

Да что там 16 миллиардов. Студенты порой жалуются, что на экзамене файл весит 50МБ и их программы долго его читают. Это не от того, что файл большой. Просто читают неправильно.

Какое здесь может быть решение? Очевидно, надо читать построчно. Но как?

У объекта, который возвращает функция open() есть много методов. В том числе метод .readlines() . По названию понятно, что делает этот метод - читает строки. Однако, в нашей задаче этот метод никак не поможет. Разберемся почему:

>>> file = open('borodino.txt') >>> lines = file.readlines() >>> print(type(lines)) >>> print(lines[:5]) >>> file.close() class 'list'> ['БОРОДИНО\n', ' Скажи-ка, дядя, ведь не даром\n', 'Москва, спаленная пожаром,\n', 'Французу отдана?\n', 'Ведь были ж схватки боевые,\n'] 

Как мы видим, метод readlines() создает список строк всего файла. То есть тоже читает файл целиком.

Как же правильно прочитать построчно?

>>> with open('borodino.txt') as file: . i = 0 . for line in file: . print(line, end='') . i += 1 . if i >= 5: . break БОРОДИНО  Скажи-ка, дядя, ведь не даром Москва, спаленная пожаром, Французу отдана? Ведь были ж схватки боевые, 

При таком способе чтения python не будет считывать файл целиком, а будет считать построчно. То есть при чтении какого-угодно файла одновременно мы будем читать только одну строку. И 16 терабайт пройдут незаметно.

Домашнее задание

Для каждого варианта своё задание.

  1. Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл каждое из введённых слов задом наперёд (каждое слово на отдельной строчке), удалив из них каждую третью букву.
  2. Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, длина которых больше 5 символов (каждое слово на отдельной строчке).
  3. Программа должна спрашивать у пользователя слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл все введённые слова, удалив в первом слове первый символ, во втором слове первые два символа, в третьем – первые три символа и т.д. (каждое слово на отдельной строчке).
  4. Программа должна спрашивать у пользователя латинские слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, которые с большой вероятностью являются инфинитивами (каждое слово на отдельной строчке). [Словами типа esse можно не заморачиваться, но пассивный инфинитив надо учесть.]
  5. Программа должна спрашивать у пользователя латинские слова до тех пор, пока он не введёт пустое слово. После этого программа должна записать построчно в файл те из введённых слов, которые с большой вероятностью являются формой 3-го лица пассива настоящего времени (каждое слово на отдельной строчке). [Нерегулярными словами можно не заморачиваться.]
  6. Программа должна получить от пользователя подряд 7 чисел, а после этого записать в файл 7 строчек, состоящих из соответствующего числа букв X (на первой строчке количество иксов равно первому введённому числу, на второй – второму и т. д.; если введённое число отрицательно, иксов на этой строчке быть не должно). В задаче обязательно пользоваться списком, а не 7 переменными!
  7. Программа должна получить от пользователя подряд 8 слов, а после этого записать в файл 4 строчки с попарными склейками этих слов: на 1-й строчке – склеенные слова 1 и 2, на второй – 3 и 4 и т. д. В задаче обязательно пользоваться списком, а не 8 переменными!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *