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

时间:2013-11-06 20:17:57

标签: 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)版本。

2 个答案:

答案 0 :(得分:6)

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,从左到右计数。

答案 1 :(得分:4)

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的文档。