从每个lin中的第一个字符分析文件

2024-04-19 00:06:16 发布

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

我正在尝试按文件每行的第一个字符对文件进行分组。你知道吗

例如,文件:

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:]来避免在groups[0]中只有s/元素。你知道吗

有更好的办法吗?还是这是最好的?你知道吗


Tags: 模块文件re编辑内容列表withgroup
1条回答
网友
1楼 · 发布于 2024-04-19 00:06:16

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

相关问题 更多 >