我知道有很多类似的问题,但似乎都没有。
让我开始吧:
我有两个文件,一个名为client-gen.txt
,另一个名为server-gen.txt
。这些文件包含随机生成的SHA1字符串,例如:
902ba3cda1883801594b6e1b452790cc53948fda
356a192b7913b04c54574d18c28d46e6395428ab
c1dfd96eea8cc2b62785275bca38ac261256e278
1b6453892473a467d07372d45eb05abc2031647a
77de68daecd823babbb58edb1c8e14d7106e83bb
现在,问题是,如果我有另一个文件,看起来像这样:
77de68daecd823babbb58edb1c8e14d7106e83bb
da4b9237bacccdf19c0760cab7aec4a8359010b0
356a192b7913b04c54574d18c28d46e6395428ab
1b6453892473a467d07372d45eb05abc2031647a
356a192b7913b04c54574d18c28d46e6395428ab
ac3478d69a3c81fa62e60f5c3696165a4e5e6ac4
da4b9237bacccdf19c0760cab7aec4a8359010b0
356a192b7913b04c54574d18c28d46e6395428ab
1b6453892473a467d07372d45eb05abc2031647a
da4b9237bacccdf19c0760cab7aec4a8359010b0
如何比较这些文件,并在这种情况下打印:
77de68daecd823babbb58edb1c8e14d7106e83bb
1b6453892473a467d07372d45eb05abc2031647a
1b6453892473a467d07372d45eb05abc2031647a
订单并不重要。
仅供参考,我已尝试使用set()
和其他方法。他们似乎都没有工作。
如果你能提供帮助,我真的很感激
答案 0 :(得分:1)
您可以使用Counter,然后只打印值为2的项目。由于打开的文件是可迭代的(即,当您使用for循环时可以遍历行),您可以调用Counter
直接打开文件:
from collections import Counter
with open('file1') as file1, open('file2') as file2:
ids = Counter(file1)
ids.update(file2)
for key, value in ids.items():
if value > 1:
print(key)
此方法将包括尾随换行符。这可能不是你想要的;如果是这种情况,您将必须显式迭代文件并明确删除空白:
from collections import Counter
with open('file1') as file1, open('file2') as file2:
ids = Counter()
for line in file1:
ids.update([line.strip()])
for line in file2:
ids.update([line.strip()])
for key, value in ids.items():
if value > 1:
print(key)
答案 1 :(得分:1)
按字母顺序对两个文件进行排序。然后在单个类似合并的传递中,您将找到所有重复项。
答案 2 :(得分:1)
我认为您的预期输出不正确,因为您不包含'356a192b7913b04c54574d18c28d46e6395428ab'
,如果您希望两个文件中出现的元素都使用set.intersection,那么您的第二个文件中会出现两次with open("a.txt") as a, open("b.txt") as b:
st = set(map(str.rstrip,a))
print("\n".join(st.intersection(map(str.rstrip,b))))
356a192b7913b04c54574d18c28d46e6395428ab
1b6453892473a467d07372d45eb05abc2031647a
77de68daecd823babbb58edb1c8e14d7106e83bb
。
{{1}}
答案 3 :(得分:0)
cl = [l.strip() for l in open("client-gen.txt")]
sl = [l.strip() for l in open("server-gen.txt")]
common = filter(lambda l: l in sl, cl)