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

Python 从每行的第一个字符解析文件,python,python-3.x,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/-/-/
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
模块(是吗?)

编辑:尝试:

下面是使用列表理解的组中的值:

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

groups = ['s/' + group for group in content.split('s/')[1:]]
由于
s/
是序列中的第一个字符,因此我使用
[1:///code>来避免在
组[0]
中只包含
s/
元素


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

假设文件的第一行以
'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

使用常规Python循环怎么样?您可以使用f.readlines()以列表的形式获取行,然后对它们进行迭代,等待第一个
s/
是否希望最终结果出现在新文件中?@Artur返回每行的一个iterable,但是,这些行是相对的;因此,
s/
之间的所有内容都需要分组。@AdiC否,局部变量是可以的,因为数据将被进一步解析(由
/
解析)。@bendl如果您是从文件工作,则f
中的行的
将保留新行
组[-1]+=line
生成一个
索引器。为什么我们要在
[-1]
上建立索引?@datta我猜你的文件不是以
's/'
开头的-让我试试另一种方法approach@asongtoruin我已经解释过了,请看我对您的question@datta你的编辑是非常具体的文件,因为它是目前-我已经改变了它,使其更一般。