需求说明
对两段文本进行代码对比,并且以对人友好可读的方式进行显示。
所需依赖
difflib
pyquery
示例代码
import difflib
from pyquery import PyQuery as pq
class Differ(object):
def __init__(self, code1, code2):
self.code1 = code1
self.code2 = code2
self.differ = difflib.HtmlDiff()
def diff(self):
lines1 = self.code1.splitlines()
lines2 = self.code2.splitlines()
return self.differ.make_file(lines1, lines2)
def parse(self, html):
"""
将提取出来的 html 是使用 pyquery 解析出 tbody 结构即为需要展示的部分
:param html:
:return:
"""
tbody = pq(html)('tbody')
# return str(tbody).encode("utf-8")
return str(tbody)
if __name__ == "__main__":
# test Differ
code1 = """
import talib
import datetime
def init(context):
# 设置起始资金
set_starting_cash(100000)
# 分配股票账户资金
allocation_funds("stock", context.portfolio.available_cash)
# content 中保存全局变量
logger.info("开始进行回测 ...")
# 设置股票池 为 000300 指数的成分股
# content.stocks = index_components("000300.XSHG")
logger.info("RunInfo: {}".format(context.run_info))
def before_trading(context):
logger.info("开始交易之前")
start_date = datetime.datetime(2010, 1, 1)
end_date = datetime.datetime(2019, 1, 1)
# content.tdays = get_trading_dates(start_date, end_date)
# logger.info("days:{}".format(content.days))
def handle_bar(context, bar_dict):
order_shares(context.s1, 1)
def after_trading(context):
pass
"""
code2 = """
import talib
import datetime
def init(context):
# 设置起始资金
set_starting_cash(100000)
# 分配股票账户资金
allocation_funds("stock", context.portfolio.available_cash)
# content 中保存全局变量
logger.info("开始进行回测 ...")
# 设置股票池 为 000300 指数的成分股
# content.stocks = index_components("000300.XSHG")
logger.info("RunInfo: {}".format(context.run_info))
def before_trading(context):
logger.info("开始交易之前")
start_date = datetime.datetime(2010, 1, 1)
end_date = datetime.datetime(2019, 1, 1)
# content.tdays = get_trading_dates(start_date, end_date)
# logger.info("days:{}".format(content.days))
def handle_bar(context, bar_dict):
order_shares(context.s1, 1)
def after_trading(context):
pass
"""
differ = Differ(code1, code2)
html = differ.diff()
# 显示差异的整个文本
# print(html)
tbody = differ.parse(html)
# 提取需用的部分
print(tbody)