【发布时间】:2018-01-17 17:30:18
【问题描述】:
我正在尝试对存储在 S3 中的两个文件进行比较,并希望尽可能避免下载这些文件。
我正在使用的示例代码如下:
import difflib
file1 = open('sample1.csv', 'r');
file2 = open('sample2.csv', 'r');
diff = difflib.ndiff(file1.readlines(), file2.readlines())
我看到使用 boto3 包,我可以从 S3 打开文件,但是如何将 file1.readlines() 和 file2.readlines() 的等价物传递给 ndiff 函数?
【问题讨论】:
-
获取字符串并在换行符处拆分?
-
不涉及存储在内存中吗?我担心的是当文件为 5GB 时,如果我尝试构建自己的行数组以输入 difflib,我将无法运行 diff。
-
是的,但
.readlines也是如此 -
Annnd 查看
difflib文档并进行了一些实验,似乎需要字符串列表。好吧,至少有__len__的东西,您可能可以对其进行猴子补丁,但如果它按照文档假定为list,它可能需要列表上可用的其他方法,而这些方法并不那么容易鸭型到一个惰性迭代。