如何根据另一个字符串有条件地从两个字符串中选择一个字符

问题描述 投票:-5回答:1

我有2个文件:文件A由1行组成,文件B由2行组成。

fileA(1行):

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

fileB(2行):

  • 第1行是主题
  • 第2行是查询
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB

我需要生成一个输出文件,如果fileA字符串包含s*,则对应索引位置的主题字符将被写入输出文件。如果存在qe,查询字符将被写入输出文件。

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

事物或多或少地起作用,但不能正常工作:我一直认为循环仅适用于第一条语句,并且产生的输出只是主题的副本

python substitution
1个回答
0
投票
  • 使用[with open,因此所有文件将自动关闭
  • 将每个string转换为list,然后.strip删除\n\r
  • lists加载到pandas.DataFrame中>
  • pandas.DataFrame.applyaxis=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)
    

    © www.soinside.com 2019 - 2024. All rights reserved.