在多个文件上查找相同的行

2024-05-08 13:15:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道有很多类似的问题,但似乎都不管用。你知道吗

让我开始:

我有两个文件,一个叫做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()和其他方法。它们似乎都不起作用。你知道吗

如果你能帮忙,我真的很感激


Tags: 文件方法字符串txtclientserver顺序情况
3条回答

我假设您预期的输出是不正确的,因为您没有包括'356a192b7913b04c54574d18c28d46e6395428ab',它同时出现在两个文件中,并且在第二个文件中出现两次,如果您希望在两个文件中出现的元素使用集合交点地址:

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

按字母顺序对两个文件进行排序。然后在一个类似于合并的过程中,您将找到所有重复项。你知道吗

可以使用Counter,然后只打印值为2的项。由于打开的文件是可iterable的(即使用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)

相关问题 更多 >