Использование python для подсчета количества строк комментариев и блоков комментариев в файле python - PullRequest
0 голосов
/ 02 июня 2019

В настоящее время я пытаюсь создать скрипт python, который подсчитывает количество строк комментариев и блоков комментариев в файле python.

Я пытался использовать регулярные выражения, но это не сработалоиз.Теперь я просто использую обычные для и если это понять.Прямо сейчас я пытаюсь выяснить, сколько строк комментариев находится в блоке, и вычитая это из общего количества строк комментариев в файле, чтобы получить количество однострочных комментариев.

it = iter(lines) # lines is a list that contains all the lines that are in the file
for each_ in lines:
    each_ = each_.strip()
    if each_.startswith('#'): # If a line starts with a '#' move to the next line
        next(it)
        print(each_)
        if each_.startswith('#') is True: # If the next line starts with a '#' increment d 
            d += 1 # d is the value for: Comment lines in a block

Пример файла python:

# a
# b
# c
Line 1
Line 2
Line 3
    # d
# e
f

Ожидаемый результат:

Блоки комментариев = 1 (во сколько раз на следующей строке появляется более одного # в той же ориентации [a, b, c являются частьюиз 1 блока комментариев, в то время как d, e не являются блоком комментариев])

Строки комментариев в блоке = 3

Однострочные комментарии = 2

1 Ответ

0 голосов
/ 02 июня 2019

Попробуйте этот код:

single_lines = []
blocks = []
block = []
block_position = 0
for line in lines.splitlines():
    try:
        position = line.index('#')  # Find the index of the first #
    except ValueError:
        position = -1
    line = line.lstrip()
    if line.startswith('#'):
        # If current block position match the new one
        if block_position == position:
            # Part of the same block, adding to the list
            block.append(line)
        else:
            # adding the previous block
            if len(block) > 0:
                if len(block) == 1:
                    single_lines.append(block)
                else:
                    blocks.append(block)
            # Starting a new block
            block = [line]
            block_position = position
    else:
        # Means that there is no # in the line
        if len(block) > 0:
            # If block was not empty we are closing it
            if len(block) == 1:
                single_lines.append(block)
            else:
                blocks.append(block)
            block_position = 0
            block = []
else:
    # Validation if at the end of the loop we still have a block that was not closed
    if len(block) > 0:
        if len(block) == 1:
            single_lines.append(block)
        else:
            blocks.append(block)

Решение для форматирования печати:

print('Total of Blocks: {}'.format(len(blocks)))
print('Total of single lines: {}'.format(len(single_lines)))
for idx, block in enumerate(blocks):
    print('Block {} - contains {} lines :\n{}'.format(idx, len(block), '\n'.join(block)))

Ввод 1 :

# a
# b
# c
Line 1
Line 2
Line 3
    # d
# e
f

Выход 1 :

[['# a', '# b', '# c'], ['# d'], ['# e']]

Ввод 2:

# a
# b
# c
Line 1
Line 2
Line 3
    # d
    # e
# f
f
# g
# h

Выход 2:

[['# a', '# b', '# c'], ['# d', '# e'], ['# f'], ['# g', '# h']]

Выход 2: с форматированием:

Total of Blocks: 3
Total of single lines: 1
Block 0 - contains 3 lines :
# a
# b
# c
Block 1 - contains 2 lines :
# d
# e
Block 2 - contains 2 lines :
# g
# h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...