如何比较相似的文本文件并输出重复项?

2024-09-27 07:31:20 发布

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

我想比较两个txt相似的文件,但是对其中一个文件进行优先级排序,其中一个文件的末尾可能包含更多的数据

例如:

文件1.txt

  userID:userBalance:userType:userCountry
  userID1:userBalance1:userType1:userCountry
  userID2:userBalance2:userType2:userCountry
  userID3:userBalanc3:userType3:userCountry

文件2.txt

  userID:userBalance
  userID1:userBalance1
  userID2:userBalance2

输出.txt

  userID:userBalance:userType:userCountry
  userID1:userBalance1:userType1:userCountry
  userID2:userBalance1:userType2:userCountry

我希望输出打印来自file1的行,其中包含来自file2的类似文本

我已经尝试了几种方法,它们只在每一行都相同的情况下才有效,即使前两部分与上面的示例相同,也不能有额外的字符串

根据我的发现,我需要一些方法来比较每一行中以“:”分隔的初始字符串,并输出file1中的行(如果在file2中找到)


Tags: 文件方法txtfile1file2useridusertypeuserid1
2条回答

使用python,只需使用in关键字即可检查字符串是否包含在另一个字符串中:

str2 in str1

所以你可以这样做:

lines1 = list()
lines2 = list()

with open('file1.txt', 'r') as f1:
    for l1 in f1:
        lines1.append(l1.strip())

with open('file2.txt', 'r') as f2:
    for l2 in f2:
        lines2.append(l2.strip())

with open('output.txt', 'w') as out:
    for elt in [l1 for l2 in lines2 for l1 in lines1 if l2 in l1]:
        out.write('{}\n'.format(elt))

最重要的部分是:

[l1 for l2 in lines2 for l1 in lines1 if l2 in l1]

这意味着您要创建一个新的l1(文件1.txt中的文本行)列表,如果此l1中包含任何l2(文件2.txt中的文本行)

我的第一个想法是使用.split(":")并将每个拆分的字符串放入每行的数组中,然后对于您给出的示例,只比较列表的前两个索引。对于文件的每一行,伪代码可能如下所示:

stringArray = fullStringFromFile1.split(":")
stringArray2 = fullStringFromFile2.split(":")
for i in range(len(smallestStringArray)):
    if stringArray[i] == stringArray2[i]:
         duplicateStringList.append(stringArray[i])

希望这能帮你找到正确的方向

相关问题 更多 >

    热门问题