2013-10-09 14 views
0

從ini文件解析錯誤的值,我如何解析用戶名= username而不是值從值?Python - 如何解決從ini文件中解析正確的值,但不解析值字段中的值

1)存儲與預定義的預設,這是我需要在Python閱讀

$ cat /var/tmp/file.ini 
banner=QUESTIONS sentence 
network=lan 
programming=pytohn 
url=http\://pbx/register?username=E300B1&password=1234&option=localip&localip= 
username=E300B1 
password=1234 
server=pbx 

2)代碼 INI文件:我試圖似乎是錯誤的用戶名/密碼字段

import re,os, time, socket, datetime, threading, subprocess, logging, gtk, gobject 
logging.basicConfig(filename='/var/tmp/log.log',level=logging.DEBUG) 

def readini(findme): 
    f = open('/var/tmp/file.ini', "r") 
    for line in f: 
    if line: 
     if findme in line: 
     r= line.split("=") 
     return r[1].replace("\\n", "").rstrip() 

host = readini("server") 
username = preadini("username") 
password = readini("password") 

command = """curl 'http://%s/a/b?username=%s&password=%s&language=EN'""" % (host, username, password) 
logging.debug(command) 
os.system(command) 

3)輸出(錯誤):

DEBUG:root:curl 'http://192.168.1.10/a/b?username=http\://pbx/register?username&password=http\://pbx/register?username&language=EN' 

4)預計產量爲:

DEBUG:root:curl 'http://192.168.1.10/a/b?username=E300B1&password=1234&language=EN' 
+1

假設你在控制配置文件格式,有更好的選擇可用:或者嘗試標準的python模塊ConfigParser,或者(我最喜歡的解決方案)使用YAML格式的配置文件並通過'import yaml'將其讀入字典中。通過'cfg = yaml.load(open(「config.yaml」))' –

回答

1

的問題是,你的條件if findme in line不支持您的文件。在你的文件中,字符串「username」在定義url的行中 - 這就是爲什麼你看到你看到的輸出。

url=http\://pbx/register?username=E300B1&password=1234&option=localip&localip= 

一個更好的辦法是:

def readini(findme): 
    f = open('/var/tmp/file.ini', "r") 
    for line in f: 
    if "=" in line: 
     key,val = line.split("=",1) 
     if findme in key: 
      return val.replace("\\n", "").rstrip() 

使用可選的INT ARG分裂保證返回的列表的長度爲兩個,這實際上是關鍵,通過該行定義的值對。

+1

也許限制到一個分裂? '''line.split(「=」,maxsplit = 1))[:1]'''以防萬一它在多行* = *符號的行上使用。 – wwii

+1

wwii,我確實限制了分割(包括關鍵字arg'maxsplit'是不必要的,暗示)。在這種情況下,包括'[:1]'也是多餘的。 – gabe

+0

對不起,不知道我在看什麼。 – wwii