Найти - Пользователи
Полная версия: Алгоритм для извлечения комментариев из исходных файлов Python
Начало » Python для новичков » Алгоритм для извлечения комментариев из исходных файлов Python
1
Pavel1982
Добрый день, уважаемые форумчане. Я никогда не работал с питоном, но тут возникла задача. Есть несколько проектов питона и нужно вытащить из исходников этих проектов комментарии.

Для комментариев в питоне используется либо #, либо строки, которые нигде не используются. Если с # все понято, то по поводу строк не все так просто. Так как нужно отличить те строки, которые используются (например, для переменных или в выражениях) от неиспользуемых строк.

Проделав несколько опытов в онлайн компиляторе я думаю о следующем алгоритме.
1. если перед открывающими кавычками (на линии кода, где эти кавычки) нет никаких символов (кроме whitespace)
2. И если после закрывающих кавычек (на линии когда, где эти кавычки) нет никаких символов (кроме whitespace)
3. И если строка не находится между скобками ()
4. И если предыдущая линия кода не заканчивается \
то это строка комментарии.

Примеры:

 a = "текст "
b = (a 
    + 
    
    """ Это НЕ комментарий!"""
    )
c = a + \
    """ Это НЕ комментарий!!""" 
'''
А это уже 
 комментарий
'''

Скажите, пожалуйста, является ли данный алгоритм правильным или нет? Может его нужно как-то подправить?
Rodegast
> строки, которые нигде не используются

С чего ты взял что это комментарии? Обычно эти строки используются для документирования.
https://pythonist.ru/docstrings-dokumentirovanie-koda-v-python/
Pavel1982
См Multiline Comments в https://www.w3schools.com/python/python_comments.asp

 """
This is a comment
written in
more than just one line
"""
print("Hello, World!")
xam1816
  
import ast
def extract_comments_from_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()
    tree = ast.parse(content)
    comments = []
    for node in ast.walk(tree):
        if isinstance(node, (ast.FunctionDef, ast.AsyncFunctionDef, ast.ClassDef, ast.Module)):
            # Извлекаем строку документации
            docstring = ast.get_docstring(node)
            if docstring:
                comments.append(docstring)
        if isinstance(node, ast.Expr) and isinstance(node.value, ast.Str):
            # Извлекаем многострочные комментарии
            comments.append(node.value.s)
    return comments
if __name__ == '__main__':
    res = extract_comments_from_file('temp.py')
    print(res)
Rodegast
> См Multiline Comments

Ну нету в python-е многострочных комментариев. Некоторые рукожопы могут пытаться использовать строки как комментарии, но по сути они комментариями не являются.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB