在中拆分一列

2024-10-03 13:27:41 发布

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

我的数据格式如下:

###John###
someData1
someData2
SomeData3
###Mike###
someData1
someData2
###Ford###
someData1
someData2
SomeData3
someData4
someData5
SomeData6

我希望输出为:

John  someData1
      someData2
      someData3

Mike  someData1
      someData2

Ford  someData1
      someData2
      someData3
      someData4
      someData5
      someData6

这里的问题是数据的数量(somedata?)每个名字下面的名字都不一样,而且不是预先知道的。我唯一要处理的是表示新名称开头的###字符。你知道吗

Somedata?是一个单词。你知道怎么做吗?你知道吗


Tags: 数据数量名字johnmike数据格式fordsomedata4
3条回答

itertools方法:

from itertools import groupby

with open('yourfile') as fin:
    for k, g in groupby(fin, lambda L: L.startswith('###')):
        if k:
            name = next(g).strip('#\n')
        else:
            print '{}\t{}'.format(name, next(g)),
            for line in g:
                print '\t{}'.format(line),
            print

我会用这样的方法:

def fixup(iterable):
    it = iter(iterable)
    for x in it:
        if x.startswith('###'):
            yield '\n{0}\t{1}'.format(x.strip('#'),next(it))
        else:
            yield '\t{0}'.format(x)

这会给你一个额外的新行在第一行,但可以很容易地剥离,如果你真的想。你知道吗

以下给出了所需的确切输出:

from sys import stdout

with open('file') as f:
    for n,line in enumerate(f):        
        if line.startswith('###'):            
            stdout.write(('' if not n else '\n')+line.strip('#\n'))
        else:
            stdout.write('\t'+line)

输出:

John    someData1
        someData2
        SomeData3

Mike    someData1
        someData2

Ford    someData1
        someData2
        SomeData3
        someData4
        someData5
        SomeData6

相关问题 更多 >