Как условно выбрать символ из двух строк, основываясь на другой строке - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть 2 файла: файл A состоит из 1 строки, а файл B - 2 строки.

файл A (1 строка):

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

файл B (2 строки):

  • Строка 1 - это тема
  • Строка 2 - это запрос
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

Мне нужно создать выходной файл, где, если строка fileA содержитs или *, символ субъекта в соответствующей позиции указателя, будет записан в выходной файл.Если есть q или e, символ запроса будет записан в выходной файл.

Output:
AAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA

мой код:

ff = open("filea.txt")
gg = open("fileb.txt")
file_as_list = ff.readline()
file_as_last = gg.readlines()
query = file_as_last[0]
subject = file_as_last[1]
for i in file_as_list:
    z = -1
    while z <= len(file_as_list):
        if i == "*":
            f = open('output.txt', 'a+', encoding='utf-8')
            f.write(subject[z])
            z += 1
        elif i == "s":
            f = open('output.txt', 'a+', encoding='utf-8')
            f.write(subject[z])
            z += 1
        elif i == "e":
            f = open('output.txt', 'a+', encoding='utf-8')
            f.write(query[z])
            z += 1
        elif i == "q":
            f = open('output.txt', 'a+', encoding='utf-8')
            f.write(query[z])
            z += 1
    break

все работает более или менее, ноне правильно: у меня всегда есть, что цикл работает только для первого оператора и производит вывод, который является просто копией темы

1 Ответ

0 голосов
/ 28 сентября 2019
  • with open, поэтому все файлы будут автоматически закрыты
  • , преобразуйте каждый string в list, затем .strip, чтобы удалить \n & \r
  • загрузить lists в pandas.DataFrame
  • pandas.DataFrame.apply с axis=1, для операций со строками
    • np.where, чтобы вернуть правильное значение
    • записать out в list и преобразовать его в str
  • записать out в output.txt файл

код:

import pandas as pd
import numpy as np

with open('fileA.txt', 'r') as filA:
    with open('fileB.txt', 'r') as filB:
        with open('output.txt', 'w', newline='\n') as output:
            fil_a = filA.readline()
            fil_b = filB.readlines()
            sub = [x for x in fil_b[0].strip()]
            que = [x for x in fil_b[1].strip()]
            line = [x for x in fil_a.strip()]
            df = pd.DataFrame({'A': line, 'sub': sub, 'que': que})
            df['out'] = df.apply(lambda x: str(np.where(x[0] in ['*', 's'], x[1], x[2])), axis=1)
            out = df.out.to_list()
            out = ''.join(x for x in out)
            output.write(out)
...