使用 python 从 json unicode 字典中删除 \n \\n 和其他不需要的字符

Removing \n \\n and other unwanted characters from a json unicode dictionary with python

我已经尝试了几种不同的解决方案来解决我的 json 字典中一些“有趣的”换行符的问题,其中 none 行得通,所以我想我可以做一个 post。该词典是通过抓取一个网站来实现的。

我有一本 json 字典:

my_dict = {
    u"Danish title": u"Avanceret", 
    u"Course type": u"MScTechnol",
    u"Type of":  u"assessmen",
    u"Date": u"\nof exami",
    u"Evaluation": u"7 step sca",
    u"Learning objectives": u"\nA studen",
    u"Participants restrictions": u"Minimum 10",
    u"Aid": u"No Aid",
    u"Duration of Course": u"13 weeks",
    u"name": u"Advanced u",
    u"Department": u"31\n",
    u"Mandatory Prerequisites": u"31545",
    u"General course objectives": u"\nThe cour",
    u"Responsible": u"\nMartin C",
    u"Location": u"Campus Lyn",
    u"Scope and form": u"Lectures, ",
    u"Point( ECTS )": u"10",
    u"Language": u"English",
    u"number": u"31548",
    u"Content": u"\nThe cour",
    u"Schedule": u"F4 (Tues 1"
}

我已将值内容剥离为 [:10] 以减少混乱,但有些值的长度为 300 个字符。它可能在这里描述得不好,但是有些值中有很多换行符,我尝试了很多不同的解决方案来删除它们,例如 str.stripstr.replace 但没有成功因为我的 'values' 是 unicode。我所说的值是指 key, value in my_dict.items().

如何删除字典中出现的所有换行符? (由于一些换行符在后面,一些在前导,而另一些在内容的中间,因此重点关注这些值:e.i \nI have a\ngood\n idea\n)。

编辑

我正在使用 Python v. 2.7.11 并且以下代码无法生成我需要的内容。我希望所有换行符都更改为单个空白字符。

for key, value in test.items():
    value = str(value[:10]).replace("\n", " ")
    print key, value

如果您要删除所有 \n 或除数字或字母之外的任何垃圾字符,请使用正则表达式

for key in my_dict.keys():
    my_dict[key] = mydict[key].replace('\n', '')
    my_dict[key] = re.sub('[^A-Za-z0-9 ]+', '', my_dict[key])
print my_dict

如果您希望保留与这些不同的任何内容,请将其添加到正则表达式

内的字符 class

删除 '\n' 试试这个....

对于键,my_dict.items() 中的值: my_dict[key] = ''.join(value.split('\n'))

您需要将更新后的值放回您的字典中(类似于 "by value vs. by reference" 情况;))...

去掉"/n"这一行可能会更多"pythonic":

new_test ={ k:v.replace("\n", "") for k,v in test.iteritems()}

要在循环中执行您尝试执行的操作,请尝试以下操作:

new_test ={ k:str(value[:10]).replace("\n", " ") for k,v in test.iteritems()}

在您的代码中,value 采用新值,但您永远不会将其写回... 因此,例如,这会起作用(但速度较慢,您也会更改循环内的值,这不会引起问题,但解释器可能不喜欢...):

for key, value in test.items():
    value = str(value[:10]).replace("\n", " ")
    #now put it back to the dictionary...
    test[key]=value
    print key, value