2016-06-30 46 views
0

我編寫了一個小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 

任何幫助,歡迎。

+0

當您使用'在INFILE行:'循環通過文件中的行,「行」不會包含尾隨的換行符。 –

+0

像這樣的問題是正則表達式可以成爲你最好的朋友的地方! – Signus

+0

謝謝,夥計們。我是python的新手。我目前無法處理正則表達式。 @John:我是python \ coding的新手,我無法跟隨你。 – user6255179

回答

-1
Tag = False  
for line in infile: 

    for item in itemObj: 
     if line.find("ObjectAlias " + item + "\n") !=-1: 
      Tag = True 
    if Tag: 
     dummy += line 

    if line.find("End") != -1: 
      Tag = False 

你只需要改變你的if語句

+0

感謝您的幫助。我想從上面的文件複製一行到一個新的文件,目前,我的代碼不工作。 – user6255179

+0

@ user6255179 - 我建議提供比「我的代碼不工作」更多的信息,因爲雖然SO用戶願意提供幫助,但如果您不提供說明或示例顯示您嘗試過的內容,他們不願意提供幫助。 – Signus

+0

@ user6255179我讀過你的代碼並更新了我的帖子,它應該幫助 –

0

最簡單的方法來檢查,這是與if ... in ...,就像這樣:

if "[BeginObjects]" in line: 
    print "We found the string '[BringObjects]'" 
相關問題