Python: запись в определенной позиции в файле

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

keys```values

Теперь, предполагая, что мне нужно искать все ключи в последующем файле, имеющем пару ключ-значение и сопоставляя ключи, нужно записать некоторое значение для конкретного ключа в позиции значения.

Вот мой код, который при запуске совпадает с шаблоном, показывает точный вывод на консоли, но при записи в файл записывает вместо него конец файла.

import re
with open('perceive.txt','r') as jawabdo:
   for harsawal in jawabdo:

       with open('answers.txt','ab+') as letmethink:
           for spquestion in letmethink:
               sawal,jawab = spquestion.split("```")
               matching = re.match(sawal.lstrip('\r'),harsawal)
               if matching:
                   size = len(jawab)
                   if(size == 1):
                      jawab = "coming soon"
                      letmethink.write(jawab)
                      print('Answers written successfully!!!')
       letmethink.close()
jawabdo.close()

Примечание: воспринимать файл.txt - это файл с ключами, а файл ответов - файл с парой значений ключей.

2 ответа

Там нет возможного способа записи в определенном месте в текстовом файле

Хорошая альтернатива это:

  • Читать файл everything = letmethink.read()
  • Вставьте новые данные everything = everything[:pos] + new_data + everything[pos + 1:]
  • Удалить файл letmethink.truncate()
  • Полностью заменить файл letmethink.write(everything)

Если вы не хотите этого делать, вам нужно использовать базу данных и sqlite3, с помощью которых вы можете вставлять данные в определенные места

Есть способ записи в определенную позицию в файле . Но это работает как вставка вместо добавления между существующими данными.

Как сказано в документации Python :

искать (смещение, откуда =SEEK_SET, /)

Измените позицию потока на заданное смещение в байтах. смещение интерпретируется относительно положения, указанного откуда. Значение по умолчанию для параметра «откуда» — SEEK_SET. Значения откуда:

SEEK_SET или 0 – начало потока (по умолчанию); смещение должно быть нулевым или положительным

SEEK_CUR или 1 – текущая позиция потока; смещение может быть отрицательным

SEEK_END или 2 – конец потока; смещение обычно отрицательное

Вернуть новую абсолютную позицию.

Вы можете использоватьseekфункцию для выполнения вашей задачи (если, конечно, она вам подходит).

Пример

У нас естьexample.txtсо следующим содержанием:StackOverflow.

      >>> file = open('example.txt', 'r+')
>>> file.seek(5)  # bytes
5
>>> file.write('123')
3
>>> file.read()
'rflow'

Теперь наш новый контентStack123rflow. Но вы можете заметить, чтоread()сместил наш курсор после новых данных (123). Чтобы переместить его обратно, вы можете использоватьfile.seek(0).

Другие вопросы по тегам