Как добавить строку в строку в середине файла, используя python? - PullRequest
0 голосов
/ 18 июня 2019

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

Пока у меня есть:

import errno
import glob

path = '/path/to/key_files/*.txt'
SubjectName = 'predetermined'

files = glob.glob(path)
for filename in files:
    try:
        with open(filename, 'r+') as f:
           for line in f:
               if SubjectName in line:
                   print(line)
    except IOError as exc:
        if exc.errno != errno.EISDIR:
            raise

Который печатает строку из текстового файла, содержащего указанную мной строку, поэтому я знаю, что весь код работает с точки зрения поиска правильной строки. Теперь я хочу добавить строку ', - processing \ n' в конец найденной строки, а не добавлять ее в самый конец файла. Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Вы можете использовать re.sub.После прочтения файла с помощью f.read() вы можете использовать см. f.seek(0) для перемотки в начало и использовать f.write() для записи нового содержимого (вам нужно открыть файл с флагом r+):

Содержимое file.txt:

Line1
Line2
Line3
Line4

Скрипт:

import re

SubjectName = 'Line3'

with open('file.txt', 'r+') as f:
    s = f.read()
    new_s = re.sub(r'^(.*{}.*)$'.format(re.escape(SubjectName)), lambda g: g.group(0) + ',--processed', s, flags=re.MULTILINE)
    f.seek(0)
    f.write(new_s)

После запуска file.txt содержит:

Line1
Line2
Line3,--processed
Line4
0 голосов
/ 18 июня 2019

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

Обратите внимание, что вы не можете просто добавить в середину файла.Закодированные символы находятся в определенных местах файла, и они не просто слегка сместятся, чтобы добавить еще несколько символов в середине.Вам почти наверняка нужно сделать новый файл.Конечно, когда вы закончите, вы можете удалить входной файл и переименовать выходной файл.

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

...