阅读 python 时忽略文本文件中的多行注释

ignore multiline comments in text file when reading in python

我正在尝试使用 python 脚本计算目录中多个文本文件中的代码行数。我想出了以下方法,但只有当注释在一行而不是多行时才有效。有办法吗?

def remove_comments(line):
    if line.startswith('/*') or line.endsswith('*/'):
        return 0
    else:
        return 1

count = sum(remove_comments(line) for line in f if line.strip())

一个肮脏的 hack 可能是使用全局变量:

with open("test", 'r') as f_in:
    f = f_in.readlines()

is_in_comment = False

def remove_comments(line):
    global is_in_comment
    line = line.strip()

    if line.startswith('/*'):
        is_in_comment = True
        return 0
    elif line.endswith('*/'):
        is_in_comment = False
        return 0

    return 0 if is_in_comment else 1

count = sum(remove_comments(line) for line in f if line.strip())

不过,这假设您不能在没有之前的 /* 的情况下获得 */。此代码 returns 3 用于以下 test 文件:

That is one line
Another
/* Comment
Other comment
End comment */
Final line, not a comment