检查多个文件是否相同

Check multiple files if of the same

我有一个 paths_list,假设它们是相同的。

In [96]: len(paths_list)
Out[96]: 191
In [97]: paths_list
Out[97]:
['~/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.CloudPhotosConfiguration/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.PressAndHold/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.iCal.CalendarNC/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.languageassetd/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.photos.VideoConversionService/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.iCal/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.share.Video.upload-Youku/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.QuickTimePlayerX/Data/Desktop/Dev/sample.py',
 '~/Library/Containers/com.apple.PassKit.PaymentAuthorizationUIExtension/Data/Desktop/Dev/sample.py',
 ...]

尝试用 set

检查它们
In [99]: { os.stat(i) for i in paths_list}
Out[99]: {os.stat_result(st_mode=33188, st_ino=8593437981, st_dev=16777220, 
st_nlink=1, st_uid=501, st_gid=20, st_size=554, st_atime=1510741689, 
st_mtime=1510453338, st_ctime=1510741688)}

返回的集合只包含一项,可以断定它们是一些文件。

我了解到 os.path.samefile 每次检查两条路径。 如何用os.path.samefile或其他优雅的方法检查paths_list?

我同意你的方法,os.path.samefile() 检查两个文件的 st_inost_dev,与你的方法基本相同,但如果你真的想使用 samefile(),试试这个:

all(os.path.samefile(paths_list[i], paths_list[i+1])
    for i in range(len(paths_list)-1))

通过确保文件列表中文件的每个邻居对 return True 调用 samefile(),您可以说它们都是同一个文件。