2014-12-24 50 views
0

我有幾個配置文件。一個有一些團隊名稱,另一個有職位。我的每個用戶都會上傳一個包含團隊和職位的文件。團隊和職位必須與配置文件中的內容相匹配,否則會打印錯誤。我可以讓腳本從每個配置文件中只讀取一個值。它不會讀取其餘的值。我怎樣才能讀取配置文件中的所有值?如何讓我的Python腳本讀取配置文件中的所有值?

這裏有兩個配置文件: 爲球隊: [隊伍] 團隊=巴塞羅那,拜仁,國米,切爾西

的位置:

[Positions] 

positions = striker, midfielder, defender, goalkeeper 

下面是一個簡單的文本文件:

Teams Positions User ID 
Barcelona goalkeeper BCTG-F 
Barcelona striker BCTG-F 
Bayern defender BCTG-F 
Bayern striker BCTG-F 
Inter striker BCTG-F 
Inter midfielder BCTG-F 
Chelsea midfielder BCTG-F 
Chelsea goalkeeper BCTG-F 

下面是腳本:

#!usr/bin/python 


from subprocess import * 

import sys 
import ConfigParser 
import os 
import csv 
from sys import argv 
script, user_id, team_file = argv 



def main(): 

    #get the actions 

    def teamCalls(): 
     actions = ConfigParser.SafeConfigParser() 
     actions.read('/etc/nagios/ingestion/team.cfg') 
     for section_name in actions.sections(): 
      for name, value in actions.items(section_name): 

       return '%s' %(value) 

    teamCalls() 

    #get the object types 

    def positionTypes(): 
     objects = ConfigParser.SafeConfigParser() 
     objects.read('/etc/nagios/ingestion/position.cfg') 
     for section_name in objects.sections(): 
      for name, value in objects.items(section_name): 

       return '%s' % (value) 

    positionTypes() 

    # checking path to file and user id 
    try: 
      f = csv.reader(open(team_file, "rb"), delimiter='\t') 
    except: 
      logging.error('No such file or directory. Please try again') 
    else: 
      for line in f: 
       for row in f:         
        if user_id != row[2]: 
         print ("User ID is incorrect")                     
        elif teamCalls() != row[0]: 

         print ("Wrong team")                  
        elif positionTypes() != row[1]: 
         print ("Position not valid") 

        else: 
         print row 

    finally: 
     print "all error checks done!" 






main() 

sys.exit(0) 

回答

0

您對循環的最內部語句有「返回」。這將導致它立即返回,而不會循環其餘的值。如果你想要一個值列表,你可以這樣做:

calls = [] 
for section_name in actions.sections(): 
    for name,value in actions.items(section_name): 
     calls.append(str(value)) # same as '%s' % (value) 
return calls 
+0

好吧我試過這樣,創建一個調用變量,追加它並返回它,我仍然得到相同的結果 – bayernmunich

0

那怎麼樣?

在開線( 'team.cfg', 'R'): list_fu = 打印(list_fu)[用於line.split()柱柱]

輸出:

['Teams', 'Positions', 'User', 'ID'] 
['Barcelona', 'goalkeeper', 'BCTG-F'] 
['Barcelona', 'striker', 'BCTG-F'] 
['Bayern', 'defender', 'BCTG-F'] 
['Bayern', 'striker', 'BCTG-F'] 
['Inter', 'striker', 'BCTG-F'] 
['Inter', 'midfielder', 'BCTG-F'] 
['Chelsea', 'midfielder', 'BCTG-F'] 
['Chelsea', 'goalkeeper', 'BCTG-F'] 

如果你想在這些位置閱讀,你現在應該在列EG - >位置的列,所以它是1.現在你捕捉隊和用戶如果條件:

line_in list_fu [1 ]: if line =='goalkeeper': print(line)#做你想做的事

+0

你把這個放在哪裏?在什麼功能? – bayernmunich

+0

您在初始化腳本時使用它?之後,您可以使用列表來通過if關閉和定義來獲得心愛的回報。 – user2853437

相關問題