問題
あなたのコードをテストする、それが唯一の第1のために働いていた(と他の人があまりにも、私にとっては空白でした)。私は問題がセクション間の移行であることを認識しました(そしてまた、すべての反復で再開するlicycle
)。
セクション2は、for
(if line.strip() == nextelem
)の2番目のセクションに記載されています。次の行は、セクション2のデータです(テキストはSection 2
ではありません)。
それは、言葉によっては難しいですが、以下のコードをテスト:
from itertools import cycle
filename = raw_input("Which file?: \n")
dimensionsList = ["Section 1", "Section 2", "Section 3", "Section 4",
"Section 5"]
with open(filename + ".txt", "rb") as oldfile:
licycle = cycle(dimensionsList)
nextelem = licycle.next()
for i in dimensionsList:
print(nextelem)
with open(i + ".txt", "w") as newfile:
for line in oldfile:
print("ignoring %s" % (line.strip()))
if line.strip() == i:
nextelem = licycle.next()
break
for line in oldfile:
if line.strip() == nextelem:
# nextelem = licycle.next()
print("ignoring %s" % (line.strip()))
break
print("printing %s" % (line.strip()))
newfile.write(line)
print('')
それを印刷します:
Section 1
ignoring Section 1
printing aaaa
printing bbbb
ignoring Section 2
Section 2
ignoring ccc
ignoring ddd
ignoring Section 3
ignoring eee
ignoring fff
ignoring Section 4
ignoring ggg
ignoring hhh
ignoring Section 5
ignoring iii
ignoring jjj
Section 2
Section 2
Section 2
をそれは、セクション1のために働いて、それはセクション2を検出したが、それは無視し続けこれは「セクション2」が見つからないためです。
(常に1行目から)行を再起動するたびに、私はプログラムが動作すると思います。しかし、私はよりシンプルなコードを作ってくれました。それは、セクションを見つけた場合
ソリューション
from itertools import cycle
filename = raw_input("Which file?: \n")
dimensionsList = ["Section 1", "Section 2", "Section 3", "Section 4",
"Section 5"]
with open(filename + ".txt", "rb") as oldfile:
licycle = cycle(dimensionsList)
nextelem = licycle.next()
newfile = None
line = oldfile.readline()
while line:
# Case 1: Found new section
if line.strip() == nextelem:
if newfile is not None:
newfile.close()
nextelem = licycle.next()
newfile = open(line.strip() + '.txt', 'w')
# Case 2: Print line to current section
elif newfile is not None:
newfile.write(line)
line = oldfile.readline()
が、それはこの新しいファイルに書き込みを開始します。それ以外の場合は、この現在のファイルに書き込みを続けます。
Psを.:以下、私が使用した例として、ファイル:
Section 1
aaaa
bbbb
Section 2
ccc
ddd
Section 3
eee
fff
Section 4
ggg
hhh
Section 5
iii
jjj