Python:检查头表单

2024-10-03 23:20:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,需要帮助解决一个问题。基本上,我需要打开一个文件,并阅读它,我可以做的没有问题。问题出现在第0行,我需要检查头格式。在

标头的格式必须是:p wncf nvar nclauses hard 其中“nvar”、“nclauses”和“hard”都是正整数。在

例如:

p wncf 1563 817439 186191

将是有效的标题行。在

下面是我已经回答过的一个问题的编码:

import re 
filename = raw_input('Please enter the name of the WNCF file: ') 
f = open(filename, 'r') 

for line in f: 
    p = re.compile('p wncf \d+ \d+ \d+$') 
    if p.match(line[0]) == None: 
        print "incorrect format"

我仍然得到一个不正确的格式,即使文件的格式是正确的。另外,是否可以将整数赋给一个对象?在

提前谢谢。在


Tags: 文件there标题编码格式linefilename
3条回答

好吧,有几件事。在

  1. 您只需要编译正则表达式一次。在上面给出的示例中,您将为文件中的每一行重新编译它。

  2. line[0]只是每行的第一个字符。将line[0]替换为line,您的代码应该可以工作。

要将整数赋给一个对象,必须将所需的组括在括号中。在你的情况下,让

p = re.compile(r"p wncf (\d+) (\d+) (\d+)")

而不是返回匹配对象或p.match(line),而是使用findall。检查以下内容作为您所拥有内容的替代品。在

^{pr2}$

编辑:如果你的头值也可以包含负数,你应该将r"p wncf (\d+) (\d+) (\d+)"替换为r"p wncf (-?\d+) (-?\d+) (-?\d+)"。在

类似这样的内容(lines是按顺序排列的所有行的列表):

import re
if re.match(r'p wncf \d+ \d+ \d+', lines[0]) == None:
    print "Bad format"

您可能需要使用p.match(line)。您要将行的第一个字符传递给正则表达式,而不是整行。在

相关问题 更多 >