我试图按文件每行的第一个字符对文件进行分组。
例如,文件:
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]
的元素。
有更好的方法吗?或者这是最好的吗?
答案 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