不使用sort/comm/cmp/diff,编写文件内容等价性比较脚本
比较内容元素一致但顺序不同的文件(禁止使用sort/comm/cmp/diff命令)
嘿,我来帮你搞定这个需求!你有两个文件test1.txt和test2.txt,内容里的元素完全一样只是顺序打乱了,现在要写个脚本判断它们是否等价,还不能用指定的那些命令对吧?
核心思路其实很简单:不管元素顺序怎么变,只要每个元素出现的次数完全一致,那两个文件的内容就是等价的。我给你写个Python脚本,清晰又容易理解:
from collections import defaultdict def get_element_counts(file_path): # 初始化字典统计元素出现次数 element_counts = defaultdict(int) try: with open(file_path, 'r') as f: content = f.read().strip() # 按句子分割元素(假设句子以 ". " 分隔,可按需调整规则) elements = content.split('. ') # 处理最后一个元素可能残留的句号 elements = [elem.rstrip('.') if elem.endswith('.') else elem for elem in elements] # 过滤空字符串(避免文件末尾多余分隔符影响) elements = [elem for elem in elements if elem] # 统计每个元素出现次数 for elem in elements: element_counts[elem] += 1 return element_counts except FileNotFoundError: print(f"Error: 文件 {file_path} 不存在!") return None # 生成两个文件的元素计数字典 counts1 = get_element_counts('test1.txt') counts2 = get_element_counts('test2.txt') # 对比计数结果并输出状态 if counts1 and counts2 and counts1 == counts2: print("File Comparison status - Success") else: print("File Comparison status - Failed")
脚本工作原理说明:
get_element_counts函数负责读取文件、分割元素、统计次数:它会把文件内容拆分成我们关注的元素(这里是句子),然后用字典记录每个元素出现的次数。- 分别对两个文件调用这个函数,得到两份计数结果。
- 最后对比两份计数字典:如果完全一致,说明两个文件的元素种类和出现次数都匹配,输出成功;否则输出失败。
灵活调整提示:
如果你的「内容元素」不是句子而是单词,只需要把分割逻辑改成elements = content.split(),就能按空格分割成单词来统计啦!
内容的提问来源于stack exchange,提问作者Sayan
相关产品推荐
相关产品推荐

