Python 将一个列表的元素合并到另一个列表

Python combine element of one list to another

提问人:user8217644 提问时间:10/13/2023 最后编辑:user8217644 更新时间:10/13/2023 访问量:63

问:

我有一个输入,它由一个长字符串后跟几个数字组成。这些列都是空间有限的。我必须从最终输出中的每一行中删除“ABC”(但我使用它作为限制器来提取第一列的第一部分)。我还需要使用 X 作为分隔符。我一直在尝试使用基本的 python 命令来实现这一点

注意:实际文件由数千个此类行组成。

xyz.ABC_hi1_X_hi2_X_hi3_X_hi4   3  4  6  7
pqrst.ABC_me1_X_me2             2  5  7  8 

我正在寻找这样的输出

xyz.hi_1    3 4 6 7 
xyz.hi_2    3 4 6 7 
xyz.hi_3    3 4 6 7 
xyz.hi_4    3 4 6 7 
pqrst.me_1  2 5 7 8
pqrst.me_2  2 5 7 8

到目前为止我一直在测试的片段(这显然不是最终代码)。我正在寻找有关如何通过使用更精明的 python 命令来解决这个问题的建议。

with open("test", 'r') as fp:
    for line in fp:
        col1 = line.split(' ')[0]
        split_col1 = col1.split('ABC_')
        to_append = split_col1[0]
        second_str = split_col[1]
        reg = second_str.split('_X_')

我无法将to_append和 reg 中返回的每个元素组合在一起以产生最终输出(如第二张图片所示)

Python 字符串 列表

评论

0赞 wjandrea 10/13/2023
问题是什么?请阅读如何提问。 实际上并不存在,因为代码永远不会走到那一步,所以我不确定您需要什么帮助。您明白为什么会引发错误吗?也许你只是在那里打错了字,但你的代码也有其他明显的错误。to_appendcol1('ABC_')
0赞 Tim Roberts 10/13/2023
您没有在这里进行任何打印。每行输入将产生多行输出。
1赞 user8217644 10/13/2023
@IgnatiusReilly 星号插入了“粗体”。我现在纠正了它。
0赞 user8217644 10/13/2023
@wjandrea,我在这里寻找有关如何解决此问题的指导。我纠正了你提到的错别字。您能解释一下其他错误是什么吗?
0赞 user8217644 10/13/2023
@TimRoberts 这只是我尝试过的一小部分。我正在打印和测试结果。

答:

1赞 Tim Roberts 10/13/2023 #1

在第一个空格处拆分行。拆分 ABC 字符串处的后缀。现在,您可以将其余部分分成几部分并打印输出:

with open("x.txt") as fp:
    for line in fp:
        name,_,vals = line.rstrip().partition(' ')
        prefix,_,suffix = name.partition('ABC_')
        for parts in suffix.split('_X_'):
            print(prefix+parts[:-1]+'_'+parts[-1], vals)

输出:

xyz.hi_1   3  4  6  7
xyz.hi_2   3  4  6  7
xyz.hi_3   3  4  6  7
xyz.hi_4   3  4  6  7
pqrst.me_1                     2  5  7  8
pqrst.me_2                     2  5  7  8

这假设数字永远不会高于 9。分隔所有尾随数字只会稍微多一点代码。

评论

0赞 wjandrea 10/13/2023
为什么要用虚拟变量而不是?.split(, maxsplit=1)
0赞 Tim Roberts 10/13/2023
无论哪种方式。直觉上,我怀疑分区稍微快一些,因为更简单的例程通常比更复杂的例程更快,但差异可以忽略不计。
0赞 user8217644 10/13/2023
谢谢蒂姆!以下版本对我有用:name,vals == line.rstrip().split(' ',1) prefix,suffix = name.split('ABC_') for rest in suffix.split('_X_'): print(prefix + rest[:None], val)
0赞 Tim Roberts 10/14/2023
你说你想成为.您的代码不会这样做。而且,顺便说一句,与 .hi1hi_1rest[:None]rest