Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python比较两个文本文档';内容_Python - Fatal编程技术网

python比较两个文本文档';内容

python比较两个文本文档';内容,python,Python,我试图用python比较两个文本文档,只是通过返回真/假答案来说明文本文档的内容是否相同 filehandle1=open(filename1,"r") filehandle2=open(filename2,"r") for line1 in filehandle1: for line2 in filehandle2: if line1==line2: print (True) else: print (Fa

我试图用python比较两个文本文档,只是通过返回真/假答案来说明文本文档的内容是否相同

filehandle1=open(filename1,"r")
filehandle2=open(filename2,"r")
for line1 in filehandle1:
    for line2 in filehandle2:
        if line1==line2:
            print (True)
        else:
            print (False)
我对Python非常陌生,对它没有太多的了解。我想知道是否有人知道一种比较两个文本文档的简单方法

我正在使用的文档包含:

正文1:

123456789

12345678
1234567

123456
12345

1234
123

12
文本2:

12

123
1234

12345
123456

1234567
12345678

123456789
文本3:

123456789

12345678
1234567

123456
12345

1234
123

12
我非常感谢你的帮助


谢谢。

如果您只想比较两个文件是否包含相同的文本,您可以将它们作为一个整体进行比较,而不是逐行比较:

filehandle1.read() == filehandle2.read()

另外,打开文件后不要忘记关闭它们。

如果您只想比较两个文件是否包含相同的文本,您可以将它们作为一个整体进行比较,而不是逐行比较:

filehandle1.read() == filehandle2.read()
另外,打开文件后不要忘记关闭它们。

您可以使用模块:

您可以使用以下模块:

这里有一个更好的方法<代码>邮政编码用于相同的短距离匹配

这里有一个更好的方法
zip
用于相同的短距离匹配。

@Hackaholic的答案(使用
filecmp
)可能是最好的。但是,如果您确实希望自己逐行进行比较,那么最好的方法可能是:

def EqualContent(filename1, filename2):
    with open(filename1) as f1, open(filename2) as f2:
        return all(s1==s2 for s1, s2 in zip(f1, f2))
(在Python2中,
导入未来的内置内容
以确保内置内容与Python3中的工作方式相同!)

这不需要足够的内存来同时将两个文件保存在内存中(类似于基于
read
readlines
do的方法),每次只需从每个文件中取出一行;而且,如果文件确实不同,它将最小化所需的I/O量;这是因为
all
被设计为“快速失败”——
在发现两行不同时立即返回False
(当然,在返回True之前,它确实需要走到末尾)

在Python2中,如果没有
import-future\u-builtins
zip
实际上会读取两个文件中的所有行,从而抵消其优势(Python3更智能,并且可以使Python2.7与
import
!-)一样智能。

@Hackaholic的答案(使用
filecmp
)可能是最好的。但是,如果您确实希望自己逐行进行比较,那么最好的方法可能是:

def EqualContent(filename1, filename2):
    with open(filename1) as f1, open(filename2) as f2:
        return all(s1==s2 for s1, s2 in zip(f1, f2))
(在Python2中,
导入未来的内置内容
以确保内置内容与Python3中的工作方式相同!)

这不需要足够的内存来同时将两个文件保存在内存中(类似于基于
read
readlines
do的方法),每次只需从每个文件中取出一行;而且,如果文件确实不同,它将最小化所需的I/O量;这是因为
all
被设计为“快速失败”——
在发现两行不同时立即返回False
(当然,在返回True之前,它确实需要走到末尾)


在Python2中,如果没有
import-future\u-builtins
zip
实际上会读取这两个文件中的所有行,从而抵消了它的优势(Python3更智能——您可以使Python2.7与
import
!-)相比?有你想要的输出吗?为什么不直接比较文件内容的大小呢?我对这个很陌生,所以我不熟悉散列。输出应该是布尔值。我只是陷入困境。@AnthonyForloney我认为在这种情况下,速度/内存没有优势。比较一下?有你想要的输出吗?为什么不直接比较文件内容的大小呢?我对这个很陌生,所以我不熟悉散列。输出应该是布尔值。“我只是遇到了麻烦。”安托尼福洛尼说,“我认为在这种情况下,速度/内存没有优势。