2014-10-15 4 views
2

Я разбор файл XML с помощью:Почему python добавляет в мой файл?

lxml.etree.parse(xmlFile) 

Я извлек некоторые атрибуты узла, которые содержат один обратный слэш и сохранить их в словарь

Тогда я пишу словарь в файл с помощью:

f = open(myFile, 'w') 
for k, v in sorted(dic.items()): 
    f.write(str((k,v))) 
    f.write('\n') 
f.flush() 
f.close() 

Знайте, что после разбора, если я пишу дерево в файл, используя:

 tree.write('output4.xml') 

Дерево точно так же, как исходный файл BUT Словарь, который был сохранен в myFile, имеет \\ вместо \\ Итак, почему python добавляет \ везде, где он его нашел.

Пример: это оригинальный атрибут:

"\displaystyle\mathbb{Z}_{n}\longrightarrow\mathbb{Z}" 

и в файле словаря становится:

'\\\displaystyle\\\mathbb{Z}_{n}\\\longrightarrow\\\mathbb{Z}' 
+0

это только представление ... –

ответ

0

str((k,v)) использует repr из k и v:

>>> k = r'\textit{foo}' 
>>> v = 'bla' 
>>> s = str((k, v)) 
>>> s 
"('\\\\textit{foo}', 'bla')" 

Это имеет преимущество, заключающееся deserializable с ast.literal_eval, потому что бежавшие строки из repr имеют тот же синтаксис литералов Python:

>>> import ast 
>>> print(ast.literal_eval(s)[0]) 

Если это не то, что вы хотите, вы должны найти другой способ выписывая пары.

+0

ОК это хорошо, так что он правильно пишет ключ, но не записывает значение. Я попытался сделать это как кортеж, но это дает ошибку, что он может только написать str – MathGirl

Смежные вопросы