鱼C论坛

 找回密码
 立即注册
查看: 2921|回复: 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
终于等到你,真心感谢,方便给到代码吗?我想学习学习,再次感谢。
  1. set2list = lambda s:s.replace("'","").replace("{","['").replace("}","']").replace(",","','").replace(" ","")
  2. list2set = lambda l:'{' + ','.join(l) + '}'

  3. with open('A.txt','r',encoding='utf-8') as a:
  4.     dataA = a.readlines()
  5. with open('B.txt','r',encoding='utf-8') as b:
  6.     dataB = b.readlines()
  7.    
  8. res = []
  9. for la in dataA:
  10.     la = la.strip()
  11.     for lb in dataB:
  12.         lb = eval(set2list(lb.strip()))
  13.         if la in lb:
  14.             lb.remove(la)
  15.             res.append(la+'        '+list2set(lb))
  16.             break
  17.     else:
  18.         res.append(la+'        '+'{}')
  19.         
  20. with open('C.txt','w',encoding='utf-8') as c:
  21.     c.write('\n'.join(res))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3. with open('A.txt','r',encoding='utf-8') as a:
  4.     dataA = a.readlines()
  5. with open('B.txt','r',encoding='utf-8') as b:
  6.     dataB = b.readlines()
  7.    
  8. res = []
  9. for la in dataA:
  10.     la = la.strip()
  11.     for lb in dataB:
  12.         lb = eval(set2list(lb.strip()))
  13.         if la in lb:
  14.             lb.remove(la)
  15.             res.append(la+'        '+list2set(lb))
  16.             break
  17.     else:
  18.         res.append(la+'        '+'{}')
  19.         
  20. with open('C.txt','w',encoding='utf-8') as c:
  21.     c.write('\n'.join(res))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-8-8 19:26:02 | 显示全部楼层
补充说明:
1.A.txt中只有一部分词在B.txt中,不是全部词汇都有。
2.A.txt中的词每个词中间都有“=”号,不用管它,B.txt也如此,就看做一个词即可。
谢谢
小甲鱼最新课程 -> https://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,只是后面就是一个空集合。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-8-8 20:29:02 | 显示全部楼层
C.rar (39.34 KB, 下载次数: 2)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

终于等到你,真心感谢,方便给到代码吗?我想学习学习,再次感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 17:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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