объединить символы из 2 строк с учетом соответствия и порядка Python - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть файл A, например:

s
q
s
s
e

и fileB:

*************m******************************m**m******************m********m

Я должен заменить букву «m» в файлеB в соответствии со списком файлов A, например:

*************s******************************q**s******************s********e

Я что-то сделал, но не работает:

    filea = open("filea.txt")
fileb = [line.rstrip('\n') for line in open("fileb.txt")]
for tc in filea:
    dew = fileb[0]
    pus = -1
    while True:
        pus = dew.find('m', pus + 1)
        if pus == -1:
            dew.replace('m', tc)

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019

Это решение.

file_a = './filea.txt'
file_b = './fileb.txt'

with open(file_a, 'r') as f:
    list_a = [str(x).strip() for x in f.readlines()]

with open(file_b, 'r') as f:
    str_b = f.readline()

for c in list_a:
    str_b = str_b.replace("m", c, 1)

# print(str_b)

replace (before, after) заменить ВСЕ before строки на after it.
Вы должны использовать replace(before, after, times).Вы можете указать, сколько раз заменить, используя times.

. tc содержит \n, поэтому ему нужно tc.strip().

0 голосов
/ 27 сентября 2019

Вы можете использовать iter с next в сочетании с re.sub:

import re
vals = (i.strip('\n') for i in open('fileA.txt'))
result = re.sub('\w+', lambda _:next(vals), open('fileB.txt').read())
with open('fileB.txt', 'w') as f:
  f.write(result)

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

*************s******************************q**s******************s********e'
0 голосов
/ 27 сентября 2019

Вот то, что работает, это просто быстрое решение.

with open("filea.txt", "r+") as write_file:
    line = write_file.readline()
    read_file = open("fileb.txt", "r")
    line2 = read_file.readlines()
    read_file.close()
    for ch in line2:
        ch = ch.replace('\n', '')
        line = line.replace('m', ch, 1)
write_file.seek(0)
write_file.write(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...