2015-10-15 4 views
0

Я пытаюсь использовать этот код, чтобы добавить в дерево xml простую информацию, которая у меня есть в таблице. Каждый файл имеет свой идентификатор, который мне нужно добавить в него. словарь соответствия имеет имена файлов и пары идентификаторов. в xml уже есть пустой элемент, называемый idno [@ type = 'TM'], в котором мне нужно ввести соответствующий номер идентификатора.Beautifulsoup xml

from bs4 import BeautifulSoup 

DIR = 'files/' 
corresp = {"00100004":"362375", "00100005":"362376", "00100006":"362377", "00100007":"362378"} 

for fileName, tm in corresp.iteritems(): 
    soup = BeautifulSoup(open(DIR + fileName + ".xml")) 
    tmid = soup.find("idno", type="TM") 
    tmid.append(tm) 
    print soup 

Моя первая проблема заключается в том, что некоторое время это работает, через некоторое время он говорит

tmid.append(tm) 
AttributeError: 'NoneType' object has no attribute 'append' 

Я понятия не имею, почему. вчера вечером я запускаю тот же пример кода, и теперь он жалуется таким образом.

Я также попытался etree

import xml.etree.ElementTree as ET 
DIR = 'files/' 
corresp = {"00100004":"362375", "00100005":"362376", "00100006":"362377", "00100007":"362378"} 
for fileName, tm in corresp.iteritems(): 
     f = open(DIR + fileName + ".xml") 
     tree = ET.parse(f) 
     tmid = tree.findall("//idno[@type='TM']") 
     tmid.append(tm) 
     tree.write('output.xml', encoding='utf-8', xml_declaration=True) 

Но он говорит: «ни один элемент не найден: линия 1, столбец 0»

Мой второй, вероятно, связанная с этим проблема в том, что, когда он сделал работу, я не был способный записывать вывод в файл. В идеале я хотел бы просто записать его обратно в файл, который я модифицирую.

Благодарим вас за консультацию.

+0

попробовать --- из BS4 импорт BeautifulSoup импорт OS DIR = 'файлы /' корень = os.path.abspath (DIR) = {-корреспондент "00100004": «362375», «00100005»: «362376», «00100006»: «362377», «00100007»: «362378»} для fileName, tm in corresp.iteritems(): soup = BeautifulSoup (open (os. path.join (root, "fileName", ". xml"))) tmid = soup.find ("idno", type = "TM") tmid.append (tm) print soup – SIslam

ответ

0

Для вашего первого вопроса:

find() просто возвращает результат. Если find() ничего не может найти, он возвращает None. оба результата и None не являются списком python, поэтому он не имеет метода append().

проверка док: http://www.crummy.com/software/BeautifulSoup/bs4/doc/

+0

Найти не возвращает список никогда, поэтому он вызывает исключение (не то же самое), даже если бы что-то было найдено. Find_all возвращает список или пустой список. –

+0

Я вижу, значит, в файле нет idno? на самом деле ... как насчет сохранения этого изменения в файл? –

+0

@PietroMariaLiuzzo, anwser обновляется, какова информация о трассировке вашей второй проблемы? –

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