python - 如何使用 Python Difflib 仅输出文件之间的新增内容?
问题描述
我正在使用 Difflib 比较两个文本文件,如下所示:
import difflib
new_file = open(file_name, "r")
old_file = open(old_file_name, "r")
file_difference = difflib.ndiff(old_file.readlines(), new_file.readlines())
我的目标是只输出添加。我不想知道对现有线路的更改。但是,我遇到了一个问题,所有更改/添加都标有“+”,所有减法都标有“-”。我做了很多搜索,似乎无法区分一条已更改的线路和一条全新的线路。我对如何进行感到困惑。
解决方案
我的一个好朋友提供了一个代码片段来回答我的问题:
# Open the files for comparison
with open(file_name, "r") as new_file:
with open(old_file_name, "r") as old_file:
# Find the differences between the two files
file_difference = difflib.ndiff(old_file.readlines(), new_file.readlines())
new_lines = []
file_difference = tuple(x for x in file_difference)
idx = 0
fdiff_size = len(file_difference)
while idx < fdiff_size:
line = file_difference[idx]
if line.startswith("- "):
if idx + 1 < fdiff_size and file_difference[idx + 1].startswith("? "):
# this chunk is a change, so ignore this and the next 3 lines
idx += 4
continue
elif line.startswith("+ "):
new_lines.append(line)
# always iterate after new item or no change
idx += 1
推荐阅读
- php - ProxyManager\Configuration::setGeneratorStrategy() 的返回值必须是 ProxyManager\void 的实例,不返回
- wordpress - 如何使用 Wordpress 中的日期范围选择器按日期过滤帖子?
- c - 读取浮点数的阻塞 I/O 问题 - C
- php - PHP - 将正常结构的数组附加到多维数组中的嵌套数组
- javascript - 我的关闭示例不起作用,因为我坚持
- javascript - 如何为某些输入制作具有自定义响应的魔术 8 球?
- sas - SAS 宏参数是一个列表
- oracle - 使用聚合函数和案例何时加入 View 与临时表
- razor - 添加 aspnet-api-versioning 可防止 UrlHelper 在 Razor 页面请求中生成控制器 API 路由
- python - 在 Tensorflow C++ 中将浮点向量传递给张量