{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 字符比较\n", "\n", "{mod}`difflib` 模块包含用来计算字符序列间不同并进行处理的工具。它在比较文本方面十分有效,同时还包含了利用若干公共差异格式来生成报告的函数。\n", "\n", "示例:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "text1 = \"\"\"Lorem ipsum dolor sit amet, consectetuer adipiscing\n", "elit. Integer eu lacus accumsan arcu fermentum euismod. Donec\n", "pulvinar porttitor tellus. Aliquam venenatis. Donec facilisis\n", "pharetra tortor. In nec mauris eget magna consequat\n", "convalis. Nam sed sem vitae odio pellentesque interdum. Sed\n", "consequat viverra nisl. Suspendisse arcu metus, blandit quis,\n", "rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummy\n", "molestie orci. Praesent nisi elit, fringilla ac, suscipit non,\n", "tristique vel, mauris. Curabitur vel lorem id nisl porta\n", "adipiscing. Suspendisse eu lectus. In nunc. Duis vulputate\n", "tristique enim. Donec quis lectus a justo imperdiet tempus.\"\"\"\n", "\n", "text1_lines = text1.splitlines()\n", "\n", "text2 = \"\"\"Lorem ipsum dolor sit amet, consectetuer adipiscing\n", "elit. Integer eu lacus accumsan arcu fermentum euismod. Donec\n", "pulvinar, porttitor tellus. Aliquam venenatis. Donec facilisis\n", "pharetra tortor. In nec mauris eget magna consequat\n", "convalis. Nam cras vitae mi vitae odio pellentesque interdum. Sed\n", "consequat viverra nisl. Suspendisse arcu metus, blandit quis,\n", "rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummy\n", "molestie orci. Praesent nisi elit, fringilla ac, suscipit non,\n", "tristique vel, mauris. Curabitur vel lorem id nisl porta\n", "adipiscing. Duis vulputate tristique enim. Donec quis lectus a\n", "justo imperdiet tempus. Suspendisse eu lectus. In nunc.\"\"\"\n", "\n", "text2_lines = text2.splitlines()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## 比较文本体\n", "\n", "{class}`difflib.Differ` 类适用于文本行序列并产生人类可读的 增量,或更改指令,包括各行内的差异。{class}`difflib.Differ` 生成的默认输出类似于 Unix 下的 diff 命令行工具。它包括来自两个列表的原始输入值(包括公共值)和标记数据,以指示进行了哪些更改。\n", "\n", "- 以 `-` 为前缀的行在第一个序列中,但不在第二个序列中。\n", "- 以 `+` 为前缀的行在第二个序列中,但不在第一个序列中。\n", "- 如果某行之间的版本之间存在增量差异,则使用前缀为 `?` 的额外行来突出显示新版本中的更改。\n", "- 如果一条线没有改变,则在左列上打印一个额外的空白区域,使其与可能存在差异的另一个输出对齐。\n", "- 在将文本传递给 {meth}`~difflib.Differ.compare` 之前将文本分解为一系列单独的行会生成比传入大字符串更可读的输出。\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
Lorem ipsum dolor sit amet, consectetuer adipiscing\n",
" elit. Integer eu lacus accumsan arcu fermentum euismod. Donec\n",
"- pulvinar porttitor tellus. Aliquam venenatis. Donec facilisis\n",
"+ pulvinar, porttitor tellus. Aliquam venenatis. Donec facilisis\n",
"? +\n",
"\n",
"- pharetra tortor. In nec mauris eget magna consequat\n",
"? -\n",
"\n",
"+ pharetra tortor. In nec mauris eget magna consequat\n",
"- convalis. Nam sed sem vitae odio pellentesque interdum. Sed\n",
"? - --\n",
"\n",
"+ convalis. Nam cras vitae mi vitae odio pellentesque interdum. Sed\n",
"? +++ +++++ +\n",
"\n",
" consequat viverra nisl. Suspendisse arcu metus, blandit quis,\n",
" rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummy\n",
" molestie orci. Praesent nisi elit, fringilla ac, suscipit non,\n",
" tristique vel, mauris. Curabitur vel lorem id nisl porta\n",
"- adipiscing. Suspendisse eu lectus. In nunc. Duis vulputate\n",
"- tristique enim. Donec quis lectus a justo imperdiet tempus.\n",
"+ adipiscing. Duis vulputate tristique enim. Donec quis lectus a\n",
"+ justo imperdiet tempus. Suspendisse eu lectus. In nunc.\n",
"
--- \n",
"+++ \n",
"@@ -1,11 +1,11 @@\n",
" Lorem ipsum dolor sit amet, consectetuer adipiscing\n",
" elit. Integer eu lacus accumsan arcu fermentum euismod. Donec\n",
"-pulvinar porttitor tellus. Aliquam venenatis. Donec facilisis\n",
"-pharetra tortor. In nec mauris eget magna consequat\n",
"-convalis. Nam sed sem vitae odio pellentesque interdum. Sed\n",
"+pulvinar, porttitor tellus. Aliquam venenatis. Donec facilisis\n",
"+pharetra tortor. In nec mauris eget magna consequat\n",
"+convalis. Nam cras vitae mi vitae odio pellentesque interdum. Sed\n",
" consequat viverra nisl. Suspendisse arcu metus, blandit quis,\n",
" rhoncus ac, pharetra eget, velit. Mauris urna. Morbi nonummy\n",
" molestie orci. Praesent nisi elit, fringilla ac, suscipit non,\n",
" tristique vel, mauris. Curabitur vel lorem id nisl porta\n",
"-adipiscing. Suspendisse eu lectus. In nunc. Duis vulputate\n",
"-tristique enim. Donec quis lectus a justo imperdiet tempus.\n",
"+adipiscing. Duis vulputate tristique enim. Donec quis lectus a\n",
"+justo imperdiet tempus. Suspendisse eu lectus. In nunc.\n",
"
n | 1 | abcd | n | 1 | abqcd |
2 | abcd abcd | ||||
2 | abd | 3 | abd | ||
t | 3 | abqcd | t |