我編寫了一個小python scrpit根據配置文件從多個文件中抓取行。如何根據python中的條件複製幾個文件中的行?
配置文件是這樣的:
[BeginObjects]
apple
banana
[EndObjects]
[BeginFiles]
path/fileA
path/fileB
[EndFiles]
的其他文件,每個看起來是這樣的:
some lines
ObjectAlias apple
some lines
Begin
some lines
End
some lines
ObjectAlias pear
some lines
Begin
some lines
End
more object sections
我想從上面的文件複製行到一個新的文件是這樣的:
ObjectAlias apple
some lines
Begin
some lines
End
當前代碼:
def getObjects (fileObj):#get object list from config file
fileObj.seek(0)
objList = []
Tag = False
for line in fileObj:
if line.find("[BeginObjects]") != -1:
Tag = True
elif line.find("[EndObjects]") != -1:
Tag = False
elif Tag:
objList.append(line.strip())
return (objList)
def getFiles (fileObj):#get file list form config file
fileObj.seek(0)
fileList = []
Tag = False
for line in fileObj:
if line.find("[BeginFiles]") != -1:
Tag = True
elif line.find("[EndFiles]") != -1:
Tag = False
elif Tag:
fileList.append(line.strip())
return (fileList)
def dummyRigs (fileObj, itemObj):#
dummy = ""
Tag = False
for file in fileObj:
with open(file, "r") as infile:
for line in infile:
for item in itemObj:
if line.find("ObjectAlias " + item + "\n") !=-1:
Tag = True
dummy += line
elif line.find("End") != -1:
Tag = False
dummy += line
elif Tag:
dummy += line
return (dummy)
我使用前兩個函數從配置文件中獲取文件列表和對象列表,然後將它們放到第三個函數中,以便從文件中複製行,但它不像預期的那樣工作: 我得到兩個列表從前兩個函數沒有問題,第三個函數不僅給我想要的行,但每行加倍,以及很多「結束」行(我的模式在第三個函數中)。看起來像這樣:
ObjectAlias apple
ObjectAlias apple
line12345
line12345
more line6789
more line6789
End
End
End
任何幫助,歡迎。
當您使用'在INFILE行:'循環通過文件中的行,「行」不會包含尾隨的換行符。 –
像這樣的問題是正則表達式可以成爲你最好的朋友的地方! – Signus
謝謝,夥計們。我是python的新手。我目前無法處理正則表達式。 @John:我是python \ coding的新手,我無法跟隨你。 – user6255179