Python dic替换不起作用
对于多字符串替换,我有代码Python dic替换不起作用,python,dictionary,replace,Python,Dictionary,Replace,对于多字符串替换,我有代码 import ast def replace_all(text, dic): for i, j in dic.iteritems(): text = text.replace(i, j) return text my_text = open('p.txt', 'r').read() reps2 = open('dic.txt', 'r').read() reps3 = ast.literal_eval(reps2) txt =
import ast
def replace_all(text, dic):
for i, j in dic.iteritems():
text = text.replace(i, j)
return text
my_text = open('p.txt', 'r').read()
reps2 = open('dic.txt', 'r').read()
reps3 = ast.literal_eval(reps2)
txt = replace_all(my_text, reps3)
print txt
但是,只有很少的键到值转换发生。我是python的新手,请告诉我问题出在哪里。dic.txt有30000个键值对
p、 txt文件内容如下:
OS11T0116000
OS01T0331100
OS11T0116000
OS03T0663800
OS11T0116000
OS05T0189904
OS11T0116000
OS08T0528500
{'Os01T0101800':'LOC_Os01g01170',
'Os01T0101900':'LOC_Os01g01180',
'Os01T0102000':'LOC_Os01g01190',
'Os01T0102300':'LOC_Os01g01280',
'Os01T0102400':'LOC_Os01g01290',
'Os01T0102500':'LOC_Os01g01295'}
而dic.txt文件内容如下:
OS11T0116000
OS01T0331100
OS11T0116000
OS03T0663800
OS11T0116000
OS05T0189904
OS11T0116000
OS08T0528500
{'Os01T0101800':'LOC_Os01g01170',
'Os01T0101900':'LOC_Os01g01180',
'Os01T0102000':'LOC_Os01g01190',
'Os01T0102300':'LOC_Os01g01280',
'Os01T0102400':'LOC_Os01g01290',
'Os01T0102500':'LOC_Os01g01295'}
您的原始文本是大写的,但字典中的
's'
s是小写的<代码>'S'和'S'
是两个不同的字母。将键的大写版本添加到字典中:
reps3.update({k.upper(): v for k, v in reps3.items()})
您的原始文本是大写的,但字典中的
's'
s是小写的<代码>'S'和'S'
是两个不同的字母。将键的大写版本添加到字典中:
reps3.update({k.upper(): v for k, v in reps3.items()})
这不是您的问题,但您不应该只是将
str(dic)
写入文件并使用literal\u eval
读取或返回。使用为持久性设计的格式。如果您的文件只是一个将字符串映射到字符串的字典,json.dump
/json.load
非常适合这样做。(甚至是dbm。)在您的示例中,即使在大小写转换之后,字典中的键也不会与文本中的任何行匹配。我建议您添加一个更现实的示例。在replace中使用I.upper()。这不是您的问题,但您不应该只是将str(dic)
写入文件,然后使用literal\u eval
读取或返回。使用为持久性设计的格式。如果您的文件只是一个将字符串映射到字符串的字典,json.dump
/json.load
非常适合这样做。(甚至是dbm。)在您的示例中,即使在大小写转换之后,字典中的键也不会与文本中的任何行匹配。我建议您添加一个更现实的示例。在replace中使用I.upper()。非常感谢@DYZ。经过几个小时的测试,我没能找到区分大小写的问题。是的,我应该添加一个工作示例,我的错误。非常感谢@DYZ。经过几个小时的测试,我没能找到区分大小写的问题。是的,我应该加上一个有效的例子,我的错误。