鱼C论坛

 找回密码
 立即注册
查看: 1583|回复: 8

[已解决]两个文件汉语字段自动匹配问题

[复制链接]
发表于 2020-9-17 09:07:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Amgalang 于 2020-9-17 10:33 编辑

各位鱼友大家上午好,
      我是一个python新手,目前遇到了一个问题,希望大佬给予帮助。真心谢谢大家了。
      具体问题是我有两个txt文件(文件A与文件B)

            文件A有两个字段信息:       
                AAA        [1]人[2]生命
                BBB        []植物[]动物

            文件B也有两个字段信息:
                人,生命        00002086N
                植物        00008019N
                动物        00091019N

           具体想法是,如果A与B两个文件中[]后的汉语对应,那么在文件A的两个字段后面新建相应的字段,提取并添加文件B中对应的数字编号。具体实现的效果是:
                AAA        [1]人[2]生命        00002086N
                BBB        []植物[]动物        00008019N                00091019N

           我目前拥有了些许的编程思维,但是动手能力较弱,恳请大家帮助,再次感谢,祝大家拥有美好的一天。
最佳答案
2020-9-17 17:44:13
本帖最后由 疾风怪盗 于 2020-9-17 17:46 编辑
Amgalang 发表于 2020-9-17 15:00
谢谢您的帮助
第一、刚刚了解到pandas模块是python的excel,但是 我没能安装成功,呜呜....
第二、按照 ...


这样可以么
import pandas as pd

a = pd.read_csv('A.txt', sep=':')
a['内容'] = [i.replace('1', '').replace('2', '') for i in a['内容']]
# print(a)
d = a['内容'].str.split('\[\]', expand=True).stack().reset_index(level=1, drop=True).rename('内容')
# print(d)
a = a.drop('内容', axis=1).join(d)
print(a)

b = pd.read_csv('B.txt', sep=':')
# print(b)
c = b['内容'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('内容')
# print(c)
b = b.drop('内容', axis=1).join(c)
print(b)

e = pd.merge(left=a, right=b, left_on='内容', right_on='内容')
print(e)
e.to_csv('C.txt', index=False)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-17 09:50:26 | 显示全部楼层
嚯,回答你的问题还要花费鱼币啊。那不看了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 10:35:09 | 显示全部楼层
sunrise085 发表于 2020-9-17 09:50
嚯,回答你的问题还要花费鱼币啊。那不看了

抱歉,我以为是悬赏,第一次用到所以弄错了,一顿操作后终于改过来了,哈哈哈
希望您能给予解答,谢谢您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 11:38:37 | 显示全部楼层
可以这样实现
import pandas as pd

a=pd.read_csv('A.txt')
a['编号']=''
print(a)
b=pd.read_csv('B.txt')
print(b)
for i in range(len(b)):
    for j in range(len(a)):
        num = a.loc[j, '内容'].find(b.loc[i, '内容'])
        if num>0:
            num_temp=a.loc[j, '内容'][num-3:num]
            a.loc[j,'编号']=a.loc[j,'编号']+num_temp+b.loc[i,'编号']
print(a)
a.to_csv('C.txt',index=False)
屏幕截图 2020-09-17 113743.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 15:00:17 | 显示全部楼层

谢谢您的帮助
第一、刚刚了解到pandas模块是python的excel,但是 我没能安装成功,呜呜....
第二、按照您的方法需要把文件B的内容修改一下,改成一行一个内容,但其实我在实验多内容的匹配,哈哈哈 我可能说的有点绕。我再试试pandas 谢谢您  

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 17:44:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 疾风怪盗 于 2020-9-17 17:46 编辑
Amgalang 发表于 2020-9-17 15:00
谢谢您的帮助
第一、刚刚了解到pandas模块是python的excel,但是 我没能安装成功,呜呜....
第二、按照 ...


这样可以么
import pandas as pd

a = pd.read_csv('A.txt', sep=':')
a['内容'] = [i.replace('1', '').replace('2', '') for i in a['内容']]
# print(a)
d = a['内容'].str.split('\[\]', expand=True).stack().reset_index(level=1, drop=True).rename('内容')
# print(d)
a = a.drop('内容', axis=1).join(d)
print(a)

b = pd.read_csv('B.txt', sep=':')
# print(b)
c = b['内容'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('内容')
# print(c)
b = b.drop('内容', axis=1).join(c)
print(b)

e = pd.merge(left=a, right=b, left_on='内容', right_on='内容')
print(e)
e.to_csv('C.txt', index=False)
屏幕截图 2020-09-17 174317.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 19:15:36 | 显示全部楼层
本帖最后由 Amgalang 于 2020-9-17 19:46 编辑


真心谢谢您了,完美解决,佩服 哈哈哈
不过 目前我还没能安装好 pandas
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-17 19:20:50 | 显示全部楼层
Amgalang 发表于 2020-9-17 19:15
真心谢谢您了,完美解决,佩服 哈哈哈
不过 目前我还没能安装好 pandas
可以的话,我想和您交 ...

你这个手机号都随便放网上么。。。。。。。。容易被骗。。。。。。
我没空搞项目的,工作很忙的
你有问题就直接论坛上问吧
我这段时间还有点空,等回单位了就不会经常上论坛了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-17 19:47:58 | 显示全部楼层
疾风怪盗 发表于 2020-9-17 19:20
你这个手机号都随便放网上么。。。。。。。。容易被骗。。。。。。
我没空搞项目的,工作很忙的
你有问 ...

已修改 好的 好的 哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 15:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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