代码之家  ›  专栏  ›  技术社区  ›  Luis Ramon Ramirez Rodriguez

str.translate方法不替换

  •  2
  • Luis Ramon Ramirez Rodriguez  · 技术社区  · 6 年前

    我正在使用此网站的收入数据: 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=row.replace(“”,“0”)

    2)创建一个dict,将所有puntuacion映射为none或empty,分号除外。

    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 回复  |  直到 6 年前
        1
  •  4
  •   cs95 abhishek58g    6 年前

    您缺少一个步骤,即使用 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'