我正在尝试用缩略语词典中的“核糖核酸”代替“rna”等词。我试着写下以下内容,但它不能代替缩写。在
import csv,re
outfile = open ("Dict.txt", "w")
with open('Dictionary.csv', mode='r') as infile:
reader = csv.reader(infile)
mydict = {rows[0]:rows[1] for rows in reader}
print >> outfile, mydict
out = open ("out.txt", "w")
ss = open ("trial.csv", "r").readlines()
s = str(ss)
def process(s):
da = ''.join( mydict.get( word, word ) for word in re.split( '(\W+)', s ) )
print >> out, da
process(s)
样品试用版.csv文件应该是
^{pr2}$样品字典.csv公司名称:
rna,ribonucleic acid
rnd,radical neck dissection
rni,recommended nutrient intake
rnp,ribonucleoprotein
我的输出文件应该用“核糖核酸”替换“RNA”
当然可以。只需在创建字典时对每个键调用^{} ,然后在查找值时再次调用:
如果您使用的Python的旧版本没有}是{}),但似乎这对您的应用程序来说是可以的。(如果不是这样,您必须用
casefold
(IIRC,它是在2.7和3.2中添加的,但可能比这个版本晚…),请改用lower
。对于非英语字符,它并不总是正确的(例如,'ß'.casefold()
是'ss'
,而{unicodedata
编写更复杂的东西,或者找到第三方库。)好吧,你已经在用你的
re.split
来做这件事了,它对任何“非单词”字符进行拆分;然后分别查找每个得到的单词。由于corna
不在dict中,因此不会被替换。(请注意,re
的“word”字符的概念实际上可能不是您想要的,它包含下划线和数字作为单词的一部分,因此rna2dna
将不匹配,而像s1$_2(rNa/
这样的二进制数据块可能会匹配。)代码中还有另一个严重问题:
^{pr2}$调用}将是一个行列表。在该列表中调用
readlines
意味着{str
意味着s
将是一个带有[
的大字符串,然后用逗号分隔每行的repr(其周围有引号、反斜杠转义符等),然后是]
。你肯定不想那样。如果您想按原样将整个文件读入字符串,只需使用read()
。在你的数据似乎也有问题:
如果将
rna
替换为ibonucleic acid
,依此类推,您将得到一些难以读取的输出。如果这真的是你的字典格式,而且词典的使用者应该推断出一些逻辑,例如,第一个字母是从缩写中复制出来的,那么你就必须写出这个逻辑。例如:最后,在字符串文本中使用未经转义的反斜杠是个坏主意。在本例中,您可以逃脱惩罚,因为Python碰巧没有
\W
的含义,但这并不总是真的。最好的解决方法是使用原始字符串文本,比如r'(\W+)'
。在我认为这一行
s = str(ss)
导致了问题——创建的列表只是一个字符串!在试试这个:
相关问题 更多 >
编程相关推荐