複数のファイルから指定されたセクションを取得したい。Python snippet duplicate lines私が選択した
すべての私のファイルは、以下のように構成されたが、差分オブジェクトデータを持っている:
:some lines
ObjectAlias apple
some lines
Begin
some lines
End
some lines
ObjectAlias pear
some lines
Begin
some lines
End
...
は、私は私のファイルの私のリスト、指定された「ObjectAlias」パターンと機能のリストを持っていると仮定します
def dummyFunc (fileList, objList):
dummy = ""
for file in fileList:
with open(file, "r") as infile:
Tag = False
for line in infile:
for obj in objList:
if line.find("ObjectAlias " + obj + "\n") !=-1:
Tag = True
if Tag:
dummy += line
if line.find("End") != -1:
Tag = False
return (dummy)
このコードは、私がこのような結果を与える:
...
ObjectAlias cherry
ObjectAlias cherry
ObjectAlias cherry
ObjectAlias cherry
Begin
Begin
Begin
Begin
same lines
same lines
same lines
same lines
End
...
これは私が期待したものである:
...
ObjectAlias apple
some lines
Begin
some lines
End
ObjectAlias cherry
some lines
Begin
some lines
End
...
私はコードを間違っていましたか? 私がテストするので、同様のコードは1つのファイルと1つのオブジェクトでうまく動作しますが、リストを入力として使用しても機能しません。objListに5つの項目がある場合、結果は各行の5倍になります。
助けを歓迎します。
EDIT:
より明確を説明FILEA:some lines
ObjectAlias apple
some lines
Begin
some lines about apple
End
some lines
ObjectAlias pear
some lines
Begin
some lines about pear
End
some lines
ObjectAlias orange
some lines
Begin
some lines about orange
End
some lines
FILEB:
some lines
ObjectAlias lemon
some lines
Begin
some lines about lemon
End
some lines
ObjectAlias peach
some lines
Begin
some lines about peach
End
some lines
ObjectAlias tomato
some lines
Begin
some lines about tomato
End
some lines
が新しいファイルに梨や桃をフィルタリングしたいので、それは次のとおりです。
ObjectAlias pear
Begin
some lines about pear
End
ObjectAlias peach
Begin
some lines about peach
End
iownthegameの助けを借りて
、私はに私のコードを変更:
def dummyFunc (fileList, objList):
dummy = ""
for file in fileList:
with open(file, "r") as infile:
Tag = False
for line in infile:
for obj in objList:
objString = "ObjectAlias " + obj
if objString in line:
dummy += line
break
elif "Begin" in line:
Tag = True
break
elif "End" in line:
dummy += line
Tag = False
break
if Tag:
dummy += line
return (dummy)
income = ["e:/FileA", "e:/FileB"]
filter = ["pear", "peach"]
with open("e:/Result", "w") as f:
f.write(dummyFunc(income, filter))
しかし、私はこの出力を得る:
Begin
some lines about apple
End
ObjectAlias pear
Begin
some lines about pear
End
Begin
some lines about orange
End
Begin
some lines about lemon
End
ObjectAlias peach
Begin
some lines about peach
End
Begin
some lines about tomato
End
私は絶対初心者です、私が間違って何をしましたか?手伝ってくれてありがとう。
どのような結果が期待されますか? – AbrahamB