鱼C论坛

 找回密码
 立即注册
查看: 2332|回复: 5

[已解决]A.txt中的关键词,在B.txt中的搜索 求助,感谢

[复制链接]
发表于 2022-8-8 19:21:34 | 显示全部楼层 |阅读模式
10鱼币
各位好,

为了描述清楚我的需求,请大家也参看下图,图中描述了原始文件A.txt、B.txt和代码跑完后的输出结果C.txt的格式和要求。

1.每个文件里的格式说明:
        A.txt中包含了关键词,一词一行的格式。
        B.txt中有多个包含A.txt关键词的集合,一集合一行。一些词后面01,02,03,04,05的标示,所以这些会影响匹配,请把这些做个处理。
        C.txt是我需要输出的文件,需要严格按照A.txt的内容顺序排列。

2.图片:
问题.jpg

3.附件如下:
A.txt (86.39 KB, 下载次数: 1)
B.txt (42.38 KB, 下载次数: 1)

4.在此手工显示出几个输出文件 C.txt的示例:

NILH_A=HEUHED        {W1,BALCIR=HEUHED}
EBUGEN=ABV        {W2,NASVTAN=ABV}
TANIL=DASVL        {W2,TANIL=DASVL}

5.我一个一个手工干实在是太费劲了,希望得到您的帮助,等成功后请喝咖啡。哈哈哈(ps,我这样发帖不知道对不对,就是表达了我的急切心理)
等您的回复,谢谢。

最佳答案
2022-8-8 19:21:35
Amgalang 发表于 2022-8-8 20:37
终于等到你,真心感谢,方便给到代码吗?我想学习学习,再次感谢。
set2list = lambda s:s.replace("'","").replace("{","['").replace("}","']").replace(",","','").replace(" ","")
list2set = lambda l:'{' + ','.join(l) + '}'

with open('A.txt','r',encoding='utf-8') as a:
    dataA = a.readlines()
with open('B.txt','r',encoding='utf-8') as b:
    dataB = b.readlines()
    
res = []
for la in dataA:
    la = la.strip()
    for lb in dataB:
        lb = eval(set2list(lb.strip()))
        if la in lb:
            lb.remove(la)
            res.append(la+'        '+list2set(lb))
            break
    else:
        res.append(la+'        '+'{}')
        
with open('C.txt','w',encoding='utf-8') as c:
    c.write('\n'.join(res))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 19:21:35 | 显示全部楼层    本楼为最佳答案   
Amgalang 发表于 2022-8-8 20:37
终于等到你,真心感谢,方便给到代码吗?我想学习学习,再次感谢。
set2list = lambda s:s.replace("'","").replace("{","['").replace("}","']").replace(",","','").replace(" ","")
list2set = lambda l:'{' + ','.join(l) + '}'

with open('A.txt','r',encoding='utf-8') as a:
    dataA = a.readlines()
with open('B.txt','r',encoding='utf-8') as b:
    dataB = b.readlines()
    
res = []
for la in dataA:
    la = la.strip()
    for lb in dataB:
        lb = eval(set2list(lb.strip()))
        if la in lb:
            lb.remove(la)
            res.append(la+'        '+list2set(lb))
            break
    else:
        res.append(la+'        '+'{}')
        
with open('C.txt','w',encoding='utf-8') as c:
    c.write('\n'.join(res))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-8 19:26:02 | 显示全部楼层
补充说明:
1.A.txt中只有一部分词在B.txt中,不是全部词汇都有。
2.A.txt中的词每个词中间都有“=”号,不用管它,B.txt也如此,就看做一个词即可。
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-8 19:28:10 | 显示全部楼层
Amgalang 发表于 2022-8-8 19:26
补充说明:
1.A.txt中只有一部分词在B.txt中,不是全部词汇都有。
2.A.txt中的词每个词中间都有“=”号, ...

不好意思,再补充一个:

A.txt中的词若不在B.txt也要在C.txt中按照原始A.txt中的顺序写入C.txt,只是后面就是一个空集合。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 20:29:02 | 显示全部楼层
C.rar (39.34 KB, 下载次数: 2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-8 20:37:56 | 显示全部楼层

终于等到你,真心感谢,方便给到代码吗?我想学习学习,再次感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 04:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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