2016-09-04 4 views
1

У меня есть два файла, которые позволяют предположить список ключей, в то время как в другом файле есть ключи и пара значений, написанные, как показано ниже.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() 

Примечание: perceive.txt является файл с ключами, в то время как answers.txt это файл, имеющий key```value пару.

+0

чтения ответы полностью первым в списке/Dict/все. Затем напишите в конце, как вам нравится. –

+0

это похоже на то, что файл будет расти и является динамическим, который будет обновлять каждый новый вход, поэтому идея сохранения в списке/dict, а затем запись обратно в файл в этом случае представляется невозможной. Поскольку размер файла должен увеличиваться и увеличиваться с каждой новой парой значений ключа. –

ответ

1

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

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

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

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