从每行中的第一个字符解析文件

时间:2017-08-23 13:55:10

标签: python python-3.x

我试图按文件每行的第一个字符对文件进行分组。

例如,文件:

s/1/1/2/3/4/5///6
p/22/LLL/GP/1/3//
x//-/-/-/1/5/-/-/
s/1/1/2/3/4/5///6
p/22/LLL/GP/1/3//
x//-/-/-/1/5/-/-/

我需要将从第一个s/开始直到下一个s/的所有内容分组。我不认为split()会起作用,因为它会删除分隔符。

期望的最终结果:

s/1/1/2/3/4/5///6
p/22/LLL/GP/1/3//
x//-/-/-/1/5/-/-/

s/1/1/2/3/4/5///6
p/22/LLL/GP/1/3//
x//-/-/-/1/5/-/-/

如果可能,我更愿意在没有re模块的情况下这样做(是吗?)

编辑:尝试:

以下使用list comprehension获取组中的值:

with open('/file/path', 'r') as f:
    content = f.read()

groups = ['s/' + group for group in content.split('s/')[1:]]

由于s/是序列中的第一个字符,因此我使用[1:]来避免s/中只有groups[0]的元素。

有更好的方法吗?或者这是最好的吗?

1 个答案:

答案 0 :(得分:4)

假设文件的第一行以's/'开头,你可以尝试这样的事情:

groups = []
with open('test.txt', 'r') as f:
    for line in f:
        if line.startswith('s/'):
            groups.append('')
        groups[-1] += line

要处理不以's/'开头并且第一个元素是第一个's/'之前的所有行的文件,我们可以做一个小的更改并在第一个上添加一个空字符串行:

groups = []
with open('test.txt', 'r') as f:
    for line in f:
        if line.startswith('s/') or not groups:
            groups.append('')
        groups[-1] += line

或者,如果我们想跳到第一个's/'之前的行,我们可以执行以下操作:

groups = []
with open('test.txt', 'r') as f:
    for line in f:
        if line.startswith('s/'):
            groups.append('')
        if groups:
            groups[-1] += line