|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家过年好!!!
我建立了一个词典1.txt,其内容大致是:
Y_A,Fb11
Y_E,Fb11
VY_A,Fb11
0Y_A,Fb11
UY_E,Fb11
(Key是逗号前的(词缀),Value是逗号后的内容(词缀标记))
然后我想在我的目标文件2.txt中找到匹配项目,匹配的要求是,再2.txt文件中以词的后面开始匹配,因为1.txt是词缀文件。我的2.txt大致内容:
YABVY_A
AAAUY_E
VVVVY_A
SA0Y_A
最终想要得到 YABV/Y_A(Fb11),AAA/UY_E(Fb11)这样的以“/”区分并标注的文件。谢谢您了。我的鱼币不多,希望给新手解答。
以下是我做的词典的代码尝试:
dicFile = open('1.txt', 'r') # 打开数据
print('开始装载数据...')
txtDict = {} # 建立字典
while True:
line = dicFile.readline()
if line == '':
break
index = line.find(',') # 以“,”键为分割
key = line[:index]
value = line[index:]
txtDict[key] = value # 加入字典
dicFile.close()
本帖最后由 shangjiecat 于 2020-2-15 15:43 编辑
- #1.txt字典建立部分
- print('开始装载数据...')
- with open('1.txt', 'r') as dicFile:
- txtDict = {} # 建立字典
- for line in dicFile:
- li = line.split(',')
- txtDict[li[0]] = li[1].strip("\n") # 加入字典
- #匹配部分
- search = open('2.txt', 'r')
- for line in search: #对2.txt的每一行单独查找
- line = line.strip("\n") #去掉换行号
- part = '' #初始化判断条件
- x = 0
- for key in txtDict: #从字典里遍历键
- length = len(key) #获取字典键长
- if key in line: #如果一行的字符串里有key值,把key变成0(如YABVY_A变成YAB0)
- nline = line.replace(key,'0')
- else: #没有则查找下一个键
- continue
- if nline[-1] == '0' and x < length: #如果末尾有0,说明替换成功,判断新后缀长度与已存后缀哪个长
- nline = nline.replace('0',key,line.count(key)-1) #增加防止VY_AVY_AVY_A类的出现,因此反替换
- #(最后一个不替换,保留)
- x = length #因为被替换,把该后缀长度存入x,用于判断是否有更长的后缀
- part = nline[:-1] +"/"+ key + "(%s)"%txtDict[key] #输出需要的格式字符串
- inf = line if part == '' else part #如果没有则直接输出该行的判断
- print(inf,end = ',')
- search.close()
复制代码
输出如下
- 开始装载数据...
- YAB/VY_A(Fb11),AAA/UY_E(Fb11),VVV/VY_A(Fb11),SA/0Y_A(Fb11),SSSO_E, #最后一个是不存在的情况,应该是这个意思吧?
复制代码
考虑如果楼主是初学者原因,语句没有难理解的那种,然后就得用到很多循环,代码显得层层叠叠,不知道会不会有更好的想法,也不知道能不能满足楼主需求,如有疑问或要改进,欢迎回复!
|
|