如何在Python中比较文件
问题。
您需要比较Python中的文件。
解..
python中的filecmp模块可用于比较文件和目录。1。
cmp(file1, file2[, shallow])
filecmp比较文件file1和file2,如果相同则返回True,否则返回False。默认情况下,具有与os.stat()返回的相同属性的文件被视为相等。如果未提供shallow(或为True),则具有相同统计签名的文件将被视为相等。
cmpfiles(dir1, dir2, common[, shallow])
比较两个目录dir1和dir2中公用列表中包含的文件的内容。cmpfiles返回一个包含三个列表的元组-匹配,不匹配,文件名错误。
match-列出两个目录中相同的文件。
不匹配-列出不匹配的文件。
错误-列出由于某种原因而无法比较的文件。
dircmp(dir1, dir2 [, ignore[, hide]])
创建一个目录比较对象,该对象可用于对目录dir1和dir2执行各种比较操作。
ignore-忽略要忽略的文件名列表,默认值为['RCS','CVS','tags']。
hide-隐藏的文件名列表,默认为UNIX上的列表[os.curdir,os.pardir](['。','..']。
filecmp.dircmp的实例实现了以下将详细报告打印到sys.stdout的方法:
report():打印两个目录之间的比较。
report_partial_closure():打印两个目录以及两个目录的直接子目录的比较
directories.
report_full_closure():打印两个目录,它们的所有子目录,的所有子目录的比较
those subdirectories, and so on (i.e., recursively).
left_list:在目录path1中找到的文件和子目录,不包括hidelist的元素。
right_list:在目录path2中找到的文件和子目录,不包括hidelist的元素。
common:目录path1和目录path2中的文件和子目录。
left_only:仅位于目录path1中的文件和子目录。
right_only:仅位于目录path2中的文件和子目录。
common_dirs:目录路径1和目录path2中的子目录。
common_files:目录路径1和目录路径2中的文件。
same_files:目录路径1和目录路径2中内容相同的文件的路径。
diff_files:目录路径1和目录路径2中都存在但内容不同的文件的路径。
funny_files:目录路径1和目录路径2中都存在但由于某种原因而无法比较的文件路径。
subdirs:一个字典,它将common_dirs中的名称映射到dircmp对象。
准备测试数据以进行比较。
import os# prepare test data
def makefile(filename,text=None):
"""
Function: make some files
params : input file, body
"""
with open(filename, 'w') as f:
f.write(text or filename)
return
# prepare test data
def makedirectory(directory_name):
"""
Function: make directories
params : input directory
"""
if not os.path.exists(directory_name):
os.mkdir(directory_name)
# Get current working directory
present_directory = os.getcwd()
# change to directory provided
os.chdir(directory_name)
# Make two directories
os.mkdir('dir1')
os.mkdir('dir2')
# Make two same subdirectories
os.mkdir('dir1/common_dir')
os.mkdir('dir2/common_dir')
# Make two different subdirectories
os.mkdir('dir1/dir_only_in_dir1')
os.mkdir('dir2/dir_only_in_dir2')
# Make a unqiue file one each in directory
makefile('dir1/file_only_in_dir1')
makefile('dir2/file_only_in_dir2')
# Make a unqiue file one each in directory
makefile('dir1/common_file', 'Hello, Writing Same Content')
makefile('dir2/common_file', 'Hello, Writing Same Content')
# Make a non unqiue file one each in directory
makefile('dir1/not_the_same')
makefile('dir2/not_the_same')
makefile('dir1/file_in_dir1', 'This is a file in dir1')
os.mkdir('dir2/file_in_dir1')
os.chdir(present_directory)
return
if __name__ == '__main__':
os.chdir(os.getcwd())
makedirectory('example')
makedirectory('example/dir1/common_dir')
makedirectory('example/dir2/common_dir')
filecmp示例运行filecmp示例。浅层参数指示
cmp()
除元数据外,是否还要查看文件的内容。
默认设置是使用os.stat()中的可用信息执行浅表比较。如果结果相同,则认为文件相同。因此,即使内容不同,在同一时间创建的相同大小的文件也被报告为相同。
当shallow为False时,总是比较文件的内容。
import filecmpprint('Output \n *** Common File :', end=' ')
print(filecmp.cmp('example/dir1/common_file',
'example/dir2/common_file'), end=' ')
print(filecmp.cmp('example/dir1/common_file',
'example/dir2/common_file', shallow=False))
print(' *** Different Files :', end=' ')
print(filecmp.cmp('example/dir1/not_the_same',
'example/dir2/not_the_same'), end=' ')
print(filecmp.cmp('example/dir1/not_the_same',
'example/dir2/not_the_same', shallow=False))
print(' *** Identical Files :', end=' ')
print(filecmp.cmp('example/dir1/file_only_in_dir1',
'example/dir1/file_only_in_dir1'), end=' ')
print(filecmp.cmp('example/dir1/file_only_in_dir1',
'example/dir1/file_only_in_dir1', shallow=False))
输出结果
*** Common File : True True*** Different Files : False False
*** Identical Files : True True
cmpfiles示例:
使用cmpfiles()
比较一组文件的两个目录没有递归。
import filecmpimport os
# Determine the items that exist in both directories.
dir1_contents = set(os.listdir('example/dir1'))
dir2_contents = set(os.listdir('example/dir2'))
common = list(dir1_contents & dir2_contents)
common_files = [f for f in common if os.path.isfile(os.path.join('example/dir1', f))]
print(f' *** Common files are : {common_files}')
# Now, let us compare the directories
match, mismatch, errors = filecmp.cmpfiles(
'example/dir1',
'example/dir2',
common_files,)
print(f' *** Matched files are : {match}')
print(f' *** mismatch files are : {mismatch}')
print(f' *** errors files are : {errors}')
*** Common files are : ['file_in_dir1', 'not_the_same', 'common_file']*** Matched files are : ['common_file']
*** mismatch files are : ['file_in_dir1', 'not_the_same']
*** errors files are : []
7.比较目录。
import filecmpdc = filecmp.dircmp('example/dir1', 'example/dir2')
print(f"output \n *** Printing detaile report: \n ")
print(dc.report())
print(f"\n")
print(dc.report_full_closure())
输出结果
*** Printing detaile report:diff example/dir1 example/dir2
Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1']
Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2']
Identical files : ['common_file']
Differing files : ['not_the_same']
Common subdirectories : ['common_dir']
Common funny cases : ['file_in_dir1']
None
diff example/dir1 example/dir2
Only in example/dir1 : ['dir_only_in_dir1', 'file_only_in_dir1']
Only in example/dir2 : ['dir_only_in_dir2', 'file_only_in_dir2']
Identical files : ['common_file']
Differing files : ['not_the_same']
Common subdirectories : ['common_dir']
Common funny cases : ['file_in_dir1']
diff example/dir1\common_dir example/dir2\common_dir
Common subdirectories : ['dir1', 'dir2']
diff example/dir1\common_dir\dir1 example/dir2\common_dir\dir1
Identical files : ['common_file', 'file_in_dir1', 'file_only_in_dir1', 'not_the_same']
Common subdirectories : ['common_dir', 'dir_only_in_dir1']
diff example/dir1\common_dir\dir1\common_dir example/dir2\common_dir\dir1\common_dir
diff example/dir1\common_dir\dir1\dir_only_in_dir1 example/dir2\common_dir\dir1\dir_only_in_dir1
diff example/dir1\common_dir\dir2 example/dir2\common_dir\dir2
Identical files : ['common_file', 'file_only_in_dir2', 'not_the_same']
Common subdirectories : ['common_dir', 'dir_only_in_dir2', 'file_in_dir1']
diff example/dir1\common_dir\dir2\common_dir example/dir2\common_dir\dir2\common_dir
diff example/dir1\common_dir\dir2\dir_only_in_dir2 example/dir2\common_dir\dir2\dir_only_in_dir2
diff example/dir1\common_dir\dir2\file_in_dir1 example/dir2\common_dir\dir2\file_in_dir1
None
您可以进一步尝试Point1中提到的所有命令,以查看每种方法的行为。
以上是 如何在Python中比较文件 的全部内容, 来源链接: utcz.com/z/316078.html