Как редактировать файлы построчно и вставлять текст в документ по условию? - PullRequest
0 голосов
/ 25 октября 2019

У меня есть файл с именем words.txt. Это 5 строк букв:

a
b
c
d

Я бы хотел, чтобы python читал в этом файле построчно. Если за b следует c, я бы хотел вставить 3 нуля, то есть 0, 0, 0, и добавить их как 3 строки в b в том же файле (или другомодин). Желаемым результатом будет новый текстовый файл words_edited.txt, который выглядит следующим образом:

a
b
0
0
0
c
d

Это мой код:

def function():
    infile = open('words.txt')
    outfile = open('words_edited.txt', 'w')

    for line in infile:
        if line == 'b' and next(infile) == 'c':
            outfile.write('0\n0\n0\n')

if __name__ == '__main__':
    function()

1 Ответ

0 голосов
/ 25 октября 2019

Прежде всего вам нужно прочитать строки, поэтому вам нужно заменить infile = open('words.txt') на

infile = open('words.txt')
letters = infile.readlines()

или, что еще лучше, использовать .read().splitlines(), чтобы избавиться от конечных \n символов после каждой буквы. ,Если вы напечатаете файл после модификации, вы увидите список, который выглядит примерно так: ['a', 'b', 'c', 'd'], если вы выбрали последний вариант. Теперь, когда вы работаете со списком, вы можете просто перебрать его, добавив элементы в другой список и проверив, является ли текущая буква буквой b, а затем следует буква c и добавляет ли она нули в список. После этого вы можете объединить элементы списка в строку и записать ее в выходной файл. Также не забудьте закрыть файлы, как только вы закончите с ними. Полученный код будет выглядеть примерно так:

def function():
    infile = open('words.txt')
    letters = infile.read().splitlines()

    outfile = open('words_edited.txt', 'w')

    res = []

    n = len(letters)
    for i in range(n):
        res.append(letters[i])
        if letters[i] == 'b' and i + 1 != n and letters[i+1] == 'c':
            res.append('0\n0\n0')

    outfile.write('\n'.join(res))

    infile.close()
    outfile.close()

if __name__ == '__main__':
    function()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...