2017-06-22 61 views
0

下面輸入文件驗證有:列表值在python

info:pens-10-books-10,pens-10-books-20 

我讀書用Python字典像下面這樣輸入文件。

d = {} 
with open('inputfile.txt') as f: 
    for line in f: 
    if ":" not in line: 
     continue 
    key, value = line.strip().split(":", 1) 
    d[key] = value 
for key, value in d.iteritems(): 
    if key == 'info': 
     goods = value.split(",") 

現在我需要幫助來驗證提供的輸入。商品聲明爲列表,所以我需要驗證列表值。

第一個八位字節必須是字母表,第二個八位字節必須是數字,第三個八位字節必須是字母表,第四個八位字節必須是數字。如果包含超過4個八位字節的無效輸入。下面是例子

pens-10-books-10 --input valid 
apples-1-cakes-10 --input valid 
10-aplpes-10cakes --not valid input (as number contains at first octet) 
pens-10-books-20-apples-10 -- not valid input (more than 4 octets) 
+0

您是否在尋找正則表達式解決方案? – 0p3n5ourcE

+1

@ open-source可能不是,但正則表達式似乎是這裏最好也是最簡單的選項。 –

回答

0

您可以使用它驗證您輸入您的模式相匹配的正則表達式:

>>> import re 
>>> 
>>> def validate(string): 
     if re.match(r'^[a-zA-Z]+\-\d+\-[a-zA-Z]+\-\d+$', string): 
      return True 
     return False 

>>> validate('pens-10-books-10') 
True 
>>> validate('apples-1-cakes-10') 
True 
>>> validate('10-aplpes-10cakes') 
False 
>>> validate('pens-10-books-20-apples-10') 
False 
>>> 

當您goods列表,這樣,您可以遍歷每個元素的檢測和顯示,如果它是有效的:

>>> goods = ['pens-10-books-10', 'apples-1-cakes-10', 
     '10-aplpes-10cakes', 'pens-10-books-20-apples-10'] 
>>> 
>>> for string in goods: 
    print(validate(string)) 


True 
True 
False 
False 
>>>