Найдите все варианты использования оператора деления в коде Python

Я хочу найти все экземпляры в моем коде python, в которых используется оператор деления /. Мой первый инстинкт - использовать регулярное выражение. Выражение должно отфильтровывать использование / без разделения, то есть имена путей. Лучшее, что я придумал, - это [ A-z0-9_\)]/[ A-z0-9_\(]. Это найдет оператор деления в

foo/bar
foo / bar
foo/(bar*baz)
foo / 10
1/2
etc...

но также соответствовал бы /s в чем-то вроде "path/to/my/file"

Может ли кто-нибудь придумать лучшее регулярное выражение? В качестве альтернативы, есть ли способ найти разделение без регулярного выражения?

изменить: чтобы уточнить:

Для этого мне не обязательно использовать python. Я просто хочу знать, где находятся операторы подразделения, чтобы я мог вручную / визуально их проверять. Я могу игнорировать закомментированный код

Извините, чтобы уточнить, вы хотите сказать, что используете Python для чтения текстового файла, содержащего код Python?

KuboMD 11.01.2019 16:47

Не используйте для этого регулярные выражения. Вам нужен правильный синтаксический анализ кода. Посмотрите на модуль astroid. Он найдет для вас все узлы AST с операторами деления.

BoarGules 11.01.2019 16:48

Чтобы усложнить ситуацию: в строке разделения (или любой отдельной строке Python, на самом деле) могут быть символы новой строки. А как насчет целочисленного деления //?

9769953 11.01.2019 16:50

Было бы хорошо, если бы вы могли описать, что вы хотите делать с экземплярами использования оператора деления. Хотите их визуально осмотреть? Преобразовать их? и Т. Д.

vladmihaisima 11.01.2019 16:50

вы можете запустить свой код на python 2 в режиме -3, чтобы быть предупрежденным об этих случаях разделения

Jean-François Fabre 11.01.2019 16:50

А как насчет символов деления в комментариях или в закомментированном коде? Кроме того, для чего вам это нужно? Возможно, есть лучший способ добиться этого.

tobias_k 11.01.2019 16:53

Кроме того, вы хотите сделать это в Python или просто с помощью Regex, например в вашем редакторе кода?

tobias_k 11.01.2019 16:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
7
339
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

example = """c = 50
b = 100
a = c / b
print(a)
print(a * 50)
print(a / 2)
print("hello")"""

import ast
tree = ast.parse(example)
last_lineno = None
for node in ast.walk(tree):
    # Not all nodes in the AST have line numbers, remember latest one
    if hasattr(node, "lineno"):
        last_lineno = node.lineno

    # If this is a division expression, then show the latest line number
    if isinstance(node, ast.Div):
        print(last_lineno)

И ast.FloorDiv для //.

tobias_k 11.01.2019 16:57

Другие вопросы по теме