0

我有两个文件和两个场景:

  1. 两个文件的内容相同,但内容顺序不同。例如:

    • 文件 1:tom albert jim
    • 文件 2:albert jim tom

  2. 两个文件都具有相同的重要内容(例如jimalbert和)以及应该忽略的tom其他不重要内容(例如jack或)。jason例如:

    • 文件 1:tom albert jim jason
    • 文件 2:albert jim tom

一个简单的truefalse会做的。当然,在这里的两个示例中,输出都应该是true. 有任何想法吗?

4

2 回答 2

1

您可以试试这个,只需按字母顺序排列,然后再逐项比较。希望这有帮助

#Let's call f1 and f2 are string that you read from f1 and f2
f1 = 'tom albert jim jason'
f2 = 'jack albert jim tom'

unimportant_list = ['jim', 'albert', 'tom'] #this should be defined somewhere

#make list data of f1, f2. word split by a space and remove item in unimportant_list
list1 = [x for x in f1.split(' ') if x not in unimportant_list]
list2 = [x for x in f2.split(' ') if x not in unimportant_list]

#sort both list for easy compare
list1.sort()
list2.sort()

#compare length of 2 list first for better performance and also prevent exception in the for loop
if not len(list1) == len(list2):
    return false

#compare 2 list one by one
result = true
for i in range (len(list1)):
    if not list1[i] == list2[i]: #if some item not equal mean 2 list is not same
        result = false
return result
于 2013-08-26T09:52:41.797 回答
1

此答案假定您的输入在逻辑上是一袋值,即对值进行计数,但它们的位置无关紧要。它还假设其他文件中的数量大于发起者文件中的数量是可以的,但反之则不然。最后,它假设只允许启动器文件中的值出现在其他文件中。

①读取两个文件,②将每个文件的内容(可能是空格?)拆分成一个(我们用这个),③检查启动器collections.Counter文件是否有未满足的需求,④检查另一个文件中是否有意外的值.

① 读取两个文件:

with open('initiator') as f:
  contentsI = f.read()
with open('other') as f:
  contentsO = f.read()

② 将内容拆分为集合,删除过程中所有不需要的东西:

from collections import Counter
tokensI = Counter(value for value in contentsI.split()
                        if value not in [ 'unwanted1', 'unwanted2' ])
tokensO = Counter(value for value in contentsO.split()
                        if value not in [ 'unwanted1', 'unwanted2' ])

③ & ④ 比较袋子:

return not (tokensI - tokensO) and not (set(tokensO) - set(tokensI))
于 2013-08-26T09:55:15.820 回答