Amgalang 发表于 2020-12-10 16:21:20

求两个文件的重复词,不去掉重复项,代码改进 谢谢

我有两个文件A和B:
我想获得A和B的交集和,但是 A和B文件里有自己的重复词,我不希望删除它,以下是我的代码,希望给予改进,谢谢....

import re #读取re
f = open(r'C:\Users\amgalang\PycharmProjects\论文第二部分01\1000-15000已经做完的拉丁.txt')   #给予目标文档
r = open(r'C:\Users\amgalang\PycharmProjects\论文第二部分01\1000-15000以前的拉丁文件.txt')   #给予打开的目标文档
dc = open(r'C:\Users\amgalang\PycharmProjects\论文第二部分01\1000-15000重复文本.txt','a+')   #给予目标文档 a+ = 写入+ 创建
text1 = f.read()
text2 = r.read()#读取文件
textlist1 = re.split('r`\s+',text1.replace('\n',' '))#用每个空格分开单词 + 回车符改变为空格
textlist2 = re.split('r`\s+',text2.replace('\n',' '))#用每个空格分开单词 + 回车符改变为空格
list3 = ''.join(textlist1)   # ''.join()把list 变成字符串
list4 = list3.split(' ')   #用空格隔开
o = set(list4)   # no dumplicates


dc.write('UP no duplicates:')
dc.write(str(len(o)))   #导出文件并写入 up dumplicates 的 len
print(len(o))

list5 = ''.join(textlist2)
list6 = list5.split(' ')
i = set(list6)
dc.write('Down no duplicates:')
dc.write(str(len(i)))
print(len(i))


#l = (o | i)-o   #并集合-前者
#dc.write('New words:'+ str(len(l)))
#print(len(l))



n = o & i #交集合
print(len(n))
print(n)




dc.write('Intersection:'+ str(len(n))+'.'+'\n')
f.close()
r.close()
dc.close()

(我把set()函数去掉后 报错了:TypeError: unsupported operand type(s) for &: 'list' and 'list')
希望给予解决谢谢












罗一面 发表于 2020-12-10 16:21:21

# coding=utf-8
import os
import sys
import argparse
import re
def get_file1_list(file1):
      list1=[]
      gene1=open(file1,'r')
      for row in gene1:
                row=row.strip().split()
                list1.append(row)
      gene1.close()
      return list1
def get_repeat_list(file2,list1,outfile):
      list2=[]
      list1_1=list(set(list1))
      gene2=open(file2,'r')
      outf=open(outfile,'w')
      for line in gene2:
                line=line.strip().split()
                if line in list1_1:
                        list2.append(line)
                else:
                        pass
      outf.write('%s' % ('\n'.join(list(set(list2)))))
      gene2.close()

if __name__ == "__main__":
      parser = argparse.ArgumentParser(description='get the repeat words')
      parser.add_argument("--f1", default=None)
      parser.add_argument("--f2",default=None)
      parser.add_argument("--output", default=None)
      args = parser.parse_args()
      list1=get_file1_list(args.f1)
      get_repeat_list(args.f2,list1,args.output)

可以解决你举的例子 但是不知道是否能够真正解决你的文件需求

疾风怪盗 发表于 2020-12-10 22:03:40

不给txt源文件的话,很难来改

笨鸟学飞 发表于 2020-12-11 16:01:39

思路:
把A文件的单词转成列表,遍历A列表,把每个单词用成员资格运算符检查是否在B文件中,是则是重复词

Amgalang 发表于 2020-12-11 21:35:20

疾风怪盗 发表于 2020-12-10 22:03
不给txt源文件的话,很难来改

哈哈哈,谢谢老哥的回复 我刚看,txt的话 例如:
A.txt
       A
       A
       B
B.txt
       A
       C
       B
这种感觉,谢谢老哥了

Amgalang 发表于 2020-12-11 21:36:29

笨鸟学飞 发表于 2020-12-11 16:01
思路:
把A文件的单词转成列表,遍历A列表,把每个单词用成员资格运算符检查是否在B文件中,是则是重复词

有思路,我没代码 哈哈哈 谢谢您了

Amgalang 发表于 2020-12-19 15:53:01

罗一面 发表于 2020-12-10 16:21
# coding=utf-8
import os
import sys


谢谢你
页: [1]
查看完整版本: 求两个文件的重复词,不去掉重复项,代码改进 谢谢