2017-06-22 54 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 
>>>