Форум сайта python.su
Добрый день, уважаемые форумчане. Я никогда не работал с питоном, но тут возникла задача. Есть несколько проектов питона и нужно вытащить из исходников этих проектов комментарии.
Для комментариев в питоне используется либо #, либо строки, которые нигде не используются. Если с # все понято, то по поводу строк не все так просто. Так как нужно отличить те строки, которые используются (например, для переменных или в выражениях) от неиспользуемых строк.
Проделав несколько опытов в онлайн компиляторе я думаю о следующем алгоритме.
1. если перед открывающими кавычками (на линии кода, где эти кавычки) нет никаких символов (кроме whitespace)
2. И если после закрывающих кавычек (на линии когда, где эти кавычки) нет никаких символов (кроме whitespace)
3. И если строка не находится между скобками ()
4. И если предыдущая линия кода не заканчивается \
то это строка комментарии.
Примеры:
a = "текст " b = (a + """ Это НЕ комментарий!""" ) c = a + \ """ Это НЕ комментарий!!""" ''' А это уже комментарий '''
Отредактировано Pavel1982 (Фев. 27, 2024 23:57:12)
Офлайн
> строки, которые нигде не используются
С чего ты взял что это комментарии? Обычно эти строки используются для документирования.
https://pythonist.ru/docstrings-dokumentirovanie-koda-v-python/
Офлайн
См Multiline Comments в https://www.w3schools.com/python/python_comments.asp
""" This is a comment written in more than just one line """ print("Hello, World!")
Отредактировано Pavel1982 (Фев. 28, 2024 01:01:39)
Офлайн
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)
Офлайн
> См Multiline Comments
Ну нету в python-е многострочных комментариев. Некоторые рукожопы могут пытаться использовать строки как комментарии, но по сути они комментариями не являются.
Офлайн