【问题标题】:Parsing a python file to check it conforms to certain rules解析python文件以检查它是否符合某些规则
【发布时间】:2012-09-11 15:49:30
【问题描述】:

我的导师 Barry 总是因为我忘记在逗号、等号后面加空格以及在文件末尾留下太多行而责备我。我想练习一些 python 并编写一个解析器来检查我的文件,然后再将它们呈现给他。

#BarryParser v0.1

from re import findall, search

def comma_checker(line, lineno):
    """ Checks commas have a space after them """
    split_line =  line.split(', ')
    for string in split_line:
        found_error = findall('.*,.*', string)
        if found_error:
            print "BARRY ISSUE DETECTED: COMMA ERROR LINE: %s: %s" % (lineno, line)

def equals_checker(line, lineno):
    split_line =  line.split(' = ')
    for string in split_line:
    found_error = findall('.*==?.*', string)
    if found_error:
        print "BARRY ISSUE DETECTED: EQUALS ERROR LINE: %s: %s" % (lineno, line)

def too_many_blank_lines(lines):
    """if the last line is a new line and the line before is also a new line,
       rasises barry issue over too many blank lines
    """
    last_line = lines[len(lines)-1]
    second_to_last_line = lines[len(lines)-2]
    if last_line == "\n" and second_to_last_line == "\n":
        print "BARRY ISSUE DETECTED: TOO MANY BLANK LINES AT END OF TEXT"
    elif search('\t*\n{1}', last_line)and search('\t*\n{1}', second_to_last_line):
        print "BARRY ISSUE DETECTED: TOO MANY BLANK LINES AT END OF TEXT"
    elif search('\t*\n{1}', second_to_last_line) and last_line == "\n":
        print "BARRY ISSUE DETECTED: TOO MANY BLANK LINES AT END OF TEXT"

def main():
    file = open("test.txt")
    line_no = 0
    lines = file.readlines(100000) 
    too_many_blank_lines(lines) #CHECK FOR BLANK LINES AT END OF TEXT
    for line in lines:
        line_no +=1 
        if not line == "\n":
            if not line[:1] == "#":
                comma_checker(line, line_no) #CHECK COMMAS ARE DONE RIGHT
                equals_checker(line, line_no) #CHECK EQUALS HAVE SPACES AFTER & BEFORE

if __name__ == '__main__':
    main()

它将解析 python 文件。问题是,我不知道如何让等号位以相同的方式处理 == 和 =。

【问题讨论】:

  • 有几个工具可以很好地为您完成此类工作:PyLint, PyChecker or PyFlakes?。例如,查看pypi.python.org/pypi/pep8 为您进行这些测试。
  • 你想解决什么问题?
  • 您可以使用PythonTidy。因此,无需重新发明轮子。你可以像 python PythonTidy test.py barryfile.py 一样使用它。
  • 如果这是一个学习python的练习,你的问题可能更适合CodeReview

标签: python regex parsing


【解决方案1】:

看看 pep8 模块。这会检查您的代码是否符合 pep8 编码标准。

见:http://www.python.org/dev/peps/pep-0008/

这是示例输出

thenh@localhost:~> pep8 *.py
1.py:11:1: W293 blank line contains whitespace
1.py:14:80: E501 line too long (81 characters)
1.py:24:1: E302 expected 2 blank lines, found 1
1.py:37:23: W291 trailing whitespace
1.py:90:27: E201 whitespace after '['
1.py:116:36: E701 multiple statements on one line (colon)
1.py:144:9: E303 too many blank lines (2)
2.py:22:1: W391 blank line at end of file
3.py:75:29: E231 missing whitespace after ','

【讨论】:

  • 这很完美,可以从这里偷走我需要的东西。谢谢!
  • 很高兴听到这个消息。偷窃快乐。
【解决方案2】:

使用Pylint 为您检查程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2015-11-08
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多