提问人:user8217644 提问时间:10/13/2023 最后编辑:user8217644 更新时间:10/13/2023 访问量:63
Python 将一个列表的元素合并到另一个列表
Python combine element of one list to another
问:
我有一个输入,它由一个长字符串后跟几个数字组成。这些列都是空间有限的。我必须从最终输出中的每一行中删除“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 中返回的每个元素组合在一起以产生最终输出(如第二张图片所示)
答:
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
你说你想成为.您的代码不会这样做。而且,顺便说一句,与 .hi1
hi_1
rest[:None]
rest
评论
to_append
col1('ABC_')