鱼C论坛

 找回密码
 立即注册
查看: 2524|回复: 6

[已解决]求两个文件的重复词,不去掉重复项,代码改进 谢谢

[复制链接]
发表于 2020-12-10 16:21:20 | 显示全部楼层 |阅读模式
5鱼币
我有两个文件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[0])
        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[0] in list1_1:
                        list2.append(line[0])
                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)

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

最佳答案

查看完整内容

# 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[0]) gene1.close() return list1 def get_repeat_list(file2,list1,outfile): list2=[] list1_1=list(set(list1)) ge ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[0])
        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[0] in list1_1:
                        list2.append(line[0])
                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)

可以解决你举的例子 但是不知道是否能够真正解决你的文件需求
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-10 22:03:40 | 显示全部楼层
不给txt源文件的话,很难来改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-12-11 16:01:39 | 显示全部楼层
思路:
把A文件的单词转成列表,遍历A列表,把每个单词用成员资格运算符检查是否在B文件中,是则是重复词
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-11 21:35:20 | 显示全部楼层
疾风怪盗 发表于 2020-12-10 22:03
不给txt源文件的话,很难来改

哈哈哈,谢谢老哥的回复 我刚看,txt的话 例如:
A.txt
       A
       A
       B
B.txt
       A
       C
       B
这种感觉,谢谢老哥了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

有思路,我没代码 哈哈哈 谢谢您了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-12-19 15:53:01 | 显示全部楼层
罗一面 发表于 2020-12-10 16:21
# coding=utf-8
import os
import sys

谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 01:13

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表