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你的编辑是非常具体的文件,因为它是目前-我已经改变了它,使其更一般。