Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python dic替换不起作用_Python_Dictionary_Replace - Fatal编程技术网

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。经过几个小时的测试,我没能找到区分大小写的问题。是的,我应该加上一个有效的例子,我的错误。