拆分命令问题

1 投票
7 回答
3219 浏览
提问于 2025-04-16 23:17

我在使用分割命令时遇到了问题。输入的字符串如下:

080821_HWI-EAS301_0002_30ALBAAXX:1:8:1649:2027  83  chr10   42038185    255 36M =   42037995    -225    GCCAGGTTTAATAAATTATTTATAGAATACTGCATC    @?DDEAEFDAD@FBG@CDA?DBCDEECD@D?CBA>A    NM:i:0  MD:Z:36

我想从这个字符串中提取出'2027'。我使用的命令是:line.split(':',4)[1].split()[0],但是它没有成功,输出结果是'1'。

然后我改用line.split(':',4),结果还是'1',我发现第一步的分割就已经出问题了。

不过,当我尝试line.split(':',1)时,得到了我想要的结果:

1:8:1649:2027   83  chr10   42038185    255 36M =   42037995-225    GCCAGGTTTAATAAATTATTTATAGAATACTGCATC    @?DDEAEFDAD@FBG@CDA?DBCDEECD@D?CBA>A    NM:i:0  MD:Z:36

我对这个分割命令感到困惑!(我之前问过类似的问题,那时候分割命令是有效的)谢谢。

7 个回答

1

在使用split的时候,第二个参数是你想要分割的最大次数,所以在这种情况下你可能不想用这个参数。要获取分割后的第五个元素,可以这样做:

line.split(":")[4]

不过,你可能想要的做法是先按空格分割(这可以不传任何参数),然后再按冒号分割。你可以用一行代码来实现这一点,像这样:

line.split()[0].split(":")[4]
2

试试这个:

#!/usr/bin/python

line = '080821_HWI-EAS301_0002_30ALBAAXX:1:8:1649:2027  83  chr10   42038185    255 36M =   42037995    -225    GCCAGGTTTAATAAATTATTTATAGAATACTGCATC    @?DDEAEFDAD@FBG@CDA?DBCDEECD@D?CBA>A    NM:i:0  MD:Z:36'

print line.split(':')[4].split()[0]

我不太明白你为什么要这样访问包含2027的令牌:

line.split(':',4)

而不是这样:

line.split(':')[4]

我觉得你可能对split这个功能有点困惑。Python的split函数最后一个参数是你想要进行的最大分割次数。

6

看起来你想要的是

line.split(':',4)[4].split()[0]

这里的数字参数是用来指定最多可以分割多少次的。所以你有:

>>> line='080821_HWI-EAS301_0002_30ALBAAXX:1:8:1649:2027 ...'
>>> line.split(':',4)
['080821_HWI-EAS301_0002_30ALBAAXX', '1', '8', '1649', '2027 ...']

如果你从这个返回值中取出第 [1] 个元素,你会得到 '1'。我不明白你为什么对此感到惊讶。

因为你允许最多分割 4 次,而你想要的那个项目是最后一个,所以你需要的下标是 [4]:

>>> line.split(':',4)[4]
'2027 ...'

然后你可以在这个结果上按空格进行分割,从中取出第 [0] 个元素来得到你的结果。

如果你根本不传入分割限制值,你也会得到相同的结果:

>>> line.split(':')[4].split()[0]
'2027'

撰写回答