0

テキストファイルはこちら

apple1
apple2
apple3
date with apple
flower1
flower2
flower3
flower4
date with flower
dog1
dog2
date with dog

ファイルをこのようなものに変換するのに役立つpythonコードが必要です

apple1|date with apple
apple2|date with apple
apple3|date with apple
flower1|date with flower
flower2|date with flower
flower3|date with flower
flower4|date with flower
dog1|date with dog
dog2|date with dog

おそらく、ネストされたループが必要になります。これは、line.startswith "date" までカウントし、そこに到達すると、その前にすべての行を追加し、x が 0 の範囲と合計行数の間にある間、カウンターが最初からやり直します。アイデア?

4

4 に答える 4

1

私のソリューションには、日付で始まらないものを含むリストが必要です。

f = open('apple.txt')
lines = f.readlines()
f.close()
things = []
printtofile = []
for i in lines:
    things.append(i)
    if i.startswith('date'):
        things.pop()
        for x in things:
            if i[:-1] == '\n':
                printtofile.append(x[:-1]+'|'+i[:-1])
            else: 
                printtofile.append(x[:-1]+'|'+i)
        things = []
print printtofile
writefile = open('file.txt', 'w')
writefile.writelines(printtofile)
writefile.close()

それが役に立てば幸いです、Python 2.7

于 2013-07-31T14:11:00.530 に答える
0

私はあなたのために2つの解決策を持っています.

ファイルを最後から読み取り、単純なロジックでアイテムを収集します。

with open("file.txt") as f:
    lines = f.readlines()
output=[]
for line in reversed(lines):
        if line.startswith("date with"): msg = line
        else: output.append("{0}|{1}".format(line[:-1], msg))
for line in reversed(output): print line

従来の方法で、ファイルの先頭から 1 行ずつ:

granary = []
basket = []
with open("file.txt") as f:
    for line in f:
        basket.append(line)
        if line.startswith("date with"):
            granary += map(lambda x: "{0}|{1}".format(x[:-1], line), basket[:-1])
            del basket[:]
for item in granary: print item
于 2013-07-31T15:05:39.397 に答える