删除python中第一个实例后的字符串字符

2024-09-29 17:10:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我想这应该很简单,但这是一个星期五的下午,我的大脑还不清楚。在

我正在编写一个小文件parse,下面的代码将一组字符串转换为一个数据帧,将字符串拆分。在

以下是一些字符串示例:

1. NC_002523_1  Serratia entomophila plasmid pADAP, complete sequence.

2. NZ_CM003366_0    Pantoea ananatis strain CFH 7-1 plasmid CFH1-7plasmid2, whole genome shotgun sequence.

3. NZ_CP014491_0    Escherichia coli strain G749 plasmid pG749_3, complete sequence.

4. NC_015062_0  Rahnella sp. Y9602 plasmid pRAHAQ01, complete sequence.

我没有料到第4个条目中sp后面的.,正如您在下面的代码中看到的那样,我对.进行拆分,以获得排名的第一个整数。因此,我得到一个ValueError,列数超出预期。在

^{pr2}$

对于这个问题,我能想到的最简单的解决方案(直到其他边的情况破坏了它),就是替换除了第一次出现的所有.。如何做到这一点?在

我看到有一个maxreplaceargument到{},但这将与我想要的相反,并且只替换第一个实例。在

有什么建议吗?(更健壮的解析方法也是一个有效的选择,但是我更改代码的次数越少越好)。在


Tags: 文件数据字符串代码示例parsespcomplete
2条回答

使用正查找确保点前面有一个数字-sep='(?<=\d)\.|\t'

例如:

import pandas as pd
import io

columns = ["Rank", "ID", "Description"]

sighits_section = '''1. NC_002523_1\tSerratia entomophila plasmid pADAP, complete sequence.
2. NZ_CM003366_0\tPantoea ananatis strain CFH 7-1 plasmid CFH1-7plasmid2, whole genome shotgun sequence.
3. NZ_CP014491_0\tEscherichia coli strain G749 plasmid pG749_3, complete sequence.
4. NC_015062_0\tRahnella sp. Y9602 plasmid pRAHAQ01, complete sequence.'''.splitlines()

tab = pd.read_table(io.StringIO(u'\n'.join([row.rstrip('.') for row in sighits_section])),
                    sep='(?<=\d)\.|\t',
                    engine='python',
                    names=columns)

print(tab)

印刷品

^{pr2}$

为了安全起见,您可能希望在点旁边添加空格作为分隔符-sep='(?<=\d)\.\s|\t'-以减轻在描述中出现10.1的情况。这可不是防弹的。在

更安全的是,当您一次只处理一行数据时,您可以使用sep='(?<=^\d)\.\s|\t'添加一个断言,即数字也是字符串中的第一个字符。但是,这将在高于10的数字上崩溃。在

幼稚的方法

除第一次出现外,每隔.替换

line = "4. NC_015062_0  Rahnella sp. Y9602 plasmid pRAHAQ01, complete sequence."
count = line.count(".")
line = line[::-1].replace(".", "", count-1)[::-1]

这是一条单行线

^{pr2}$

相关问题 更多 >

    热门问题