读取某个字符时拆分字符串

2024-04-29 02:03:19 发布

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

我在一个文件中存储了几个字符串,每行一个,如下所示:

dsfsdfsd/mhgjghj
cvcv/xcvxc
werwr/erewrwer
nbmbn/iuouiouio
...

正如你所看到的,唯一经常出现的字符是反冲/,其余的字符在其组成中是非常随机的。我需要分别存储每条线的第一部分和第二部分(即:齿隙前后),以便得到如下结果:

first_list = [dsfsdfsd, cvcv, werwr, nbmbn, ...]
secnd_list = [mhgjghj, xcvxc, erewrwer, iuouiouio, ...]

我可以用python遍历每一行,检查是否存在反冲,并分别存储每一行的内容。它看起来是这样的:

first_list, secnd_list = [], []
for line in file:
    for indx, char in enumerate(line):
        if char == '/':
            first_list.append(line[:(indx-1)])
            secnd_list.append(line[(indx-1):])
            break

我正在寻找一个更漂亮(更pythonic)版本的代码。你知道吗


Tags: forline字符listfirstindxsecnddsfsdfsd
2条回答

split()可能在这里派上用场:

first_list, secnd_list = [], []
for line in file:
    first, second = line.split('/')
    first_list.append(first)
    secnd_list.append(second)

这里的一个假设是只有一个/存在。知道这一点,split('/')将始终返回一个2元组的元素。如果这个假设是错误的,请尝试split('/', 1),它将分割数限制为1,从左到右计数。你知道吗

除了str.split之外,您还可以使用str.partition

first_parts = []
second_parts = []
for line in file:
    before, _, after = line.partition('/')
    first_parts.append(before)
    second_parts.append(after)

另一种功能更强大的oneliner:

first_parts, _, second_parts = zip(*(line.partition('/') for line in file))

两个选项中_的解释-str.partition返回一个元组:(first_part, seperator, last_part)。在这里,我们不需要分隔符(事实上,我无法想象您为什么需要分隔符),所以我们将它赋给一次性变量_。你知道吗

Herestr.partition的文档,herestr.split的文档。你知道吗

相关问题 更多 >