str.translate方法未替换

时间:2019-01-06 18:15:22

标签: python python-3.x

我正在使用以下网站的收入数据:https://nces.ed.gov/programs/digest/d17/tables/dt17_502.30.asp

这很凌乱,正在处理的任务是删除文本的标点符号,如下所示:

'  High school completion\\1\\ ....................................;32,610;;(360);34,840;;(275);34,200;;(943);33,480;;(16);32,970;;(18);32,010;;(#);31,320;;(16);30,900;;(2);30,410;;(4);30,930;;(968);31,830;;(143);\n'

但是保留分号,因为稍后将使用它来分隔字段。

我要解决的方法是:

1)将#替换为“ 0”,因为它用于缺失值

行= row.replace(“#”,“ 0”)

2)创建一个字典以将所有标点符号映射为None或空(除分号以外)。

translation = dict((c,"") if c != ";" else (c,";") for c in string.punctuation )

3)进行翻译

这是不起作用的步骤:

row.translate(translation)

重新运行完全相同的输出:

'  High school completion\\1\\ ....................................;32,610;;(360);34,840;;(275);34,200;;(943);33,480;;(16);32,970;;(18);32,010;;(0);31,320;;(16);30,900;;(2);30,410;;(4);30,930;;(968);31,830;;(143);\n'

1 个答案:

答案 0 :(得分:4)

您缺少一步-使用str.maketrans构建翻译表:

tab = text.maketrans(dict.fromkeys(string.punctuation.replace(';',''), ''))
text.translate(tab)
# '  High school completion1 ;32610;;360;34840;;275;34200;;943;33480;;16;32970;;18;32010;;;31320;;16;30900;;2;30410;;4;30930;;968;31830;;143;\n'