Сравните 2 кода Python автоматически - PullRequest
0 голосов
/ 15 июня 2019

Хорошо, сейчас я работаю над большой базой кода Python 2.7, где моя текущая задача выглядит следующим образом:

Есть 2 модуля, скажем A и B, которые имеют много похожего кода (я имею в виду, что почти все методы идентичны). Моя цель - создать модуль Base, содержащий весь общий код.

Для этой цели в настоящее время я вручную читаю и сравниваю функции (с одинаковыми именами) между A и B с , чтобы увидеть, являются ли они одинаковыми (или даже почти одинаковыми) или нет .

Так есть ли способ автоматизировать это? Как библиотека вроде diff, которая построена для сравнения двух кодов функций Python, чтобы сказать мне, является ли их содержимое одинаковым / почти одинаковым или нет?

Так, например, в настоящее время я работаю над 2 модулями ResourceStatusDB.py и ResourceStatusManagement.py:

ResourceStatusDB.py

class ResourceManagementDB(BaseRSSDB):
.
.
.
def select(self, table, params):

    session = self.sessionMaker_o()
    XYZ()
    # finding the table
    found = False
    for ext in self.extensions:
      try:
        table_c = getattr(__import__(ext + __name__, globals(), locals(), [table]), table)
        found = True
        break
      except (ImportError, AttributeError):
        continue
    # If not found in extensions, import it from DIRAC base (this same module).
    if not found:
      table_c = getattr(__import__(__name__, globals(), locals(), [table]), table)

И ResourceStatusManagement.py выбор по умолчанию (self, table, params):

session = self.sessionMaker_o()
# finding the table
found = False
for ext in self.extensions:
  try:
    table_c = getattr(__import__(ext + __name__, globals(), locals(), [table]), table)
    found = True
    break
  except (ImportError, AttributeError):
    continue
# If not found in extensions, import it from DIRAC base (this same module).
if not found:
  table_c = getattr(__import__(__name__, globals(), locals(), [table]), table)

Обратите внимание, что две функции не совпадают. (Разница в несколько строк может быть возможной). Но все же большая часть логики одинакова на уровне функций. Есть ли способ обнаружить это?

1 Ответ

1 голос
/ 15 июня 2019

Вопрос, на мой взгляд, не связан с питоном; P

Notepad ++ имеет сравнение, если вы устанавливаете дополнения Вы можете использовать winmerge, для сравнения файлов

Total Commander также в папке синхронизации имеет инструмент defualt для сравнения и изменения.

Иди с winmerge, лучший на мой взгляд.

...