2016-05-02 2 views
0

Я пробовал несколько разных решений, чтобы исправить мою проблему с помощью некоторых «смешных» строк в моем json-словаре, и ни одна из них не работает, поэтому Я думал, что смогу сделать пост. Словарь достигается путем соскабливания веб-сайта.Удаление n \ n и других нежелательных символов из json-юникодного словаря с помощью python

У меня есть словарь 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.strip и str.replace, но безуспешно, потому что мои «значения» - unicode. А по значениям - key, value in my_dict.items().

Как удалить все новые строки, отображаемые в моем словаре? (Со значениями в фокусе, когда некоторые из новых строк завершаются, некоторые ведущие, а другие находятся в середине содержимого: e.i \nI have a\ngood\n idea\n).

EDIT

Я использую Python ст. 2.7.11 и следующий фрагмент кода не производить то, что мне нужно. Я хочу, чтобы все новые строки были изменены на один символ пробела.

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

Просьба привести пример, на котором «str.replace» не работает. Вы можете отредактировать вопрос и добавить его. –

+0

Вы хотите удалить новые строки или вы хотите заменить их одним пространством? Вы должны указать, какую версию Python вы используете (желательно с тегом), поскольку обработка Юникода в Python 2 и Python 3 весьма различна. Вы можете найти эту статью полезной: [Pragmatic Unicode] (http://nedbatchelder.com)/текст/unipain.html), который написал ветеран SO Нед Батчелдер. –

ответ

1

Если вы пытаетесь удалить все \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 

Если вы хотите сохранить что-либо, кроме тех, затем добавить его в класс символов внутри регулярного выражения

+0

К сожалению это удаляет все пробельные символы. Добавляя к этому, ни одна строка не удаляется, а только косая черта, которая не включена в регулярное выражение. – Zeliax

+0

теперь он должен работать нормально, проверьте пространство, включенное в класс символов –

+0

Да. Он работает хорошо сейчас, и текст является _almost_ по мере необходимости, за исключением одного. Буква «n» из «\ n» все еще остается в тексте. – Zeliax

0

для Удалить '\ п' попробовать это ....

для ключа, значение в my_dict.items(): my_dict [key] = '' .join (value.split ('\ n'))

+0

К сожалению, это не трюк .. – Zeliax

0

необходимо вернуть обновленное значение в словарь (по аналогии с ситуацией «по значению или по ссылке»;)) ...

, чтобы удалить «/ п» это один вкладыш может быть более «вещий»:

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()} 

В вашем коде значение принимает новое значение, но yo u никогда не записывайте его обратно ... Так, например, это сработало бы (но будет медленнее, также вы будете изменять значения внутри цикла, что не должно вызывать проблем, но интерпретатору может не понравиться ...):

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 
Смежные вопросы