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)
.