Как записать XML-файл в CSV-файл на Python?

#python #xml #csv #elementtree

#python #xml #csv #elementtree

Вопрос:

У меня есть XML-файл, который выглядит следующим образом:

 <?xml version="1.0"?>
-<Object>
    <ID>Object_01</ID>
    <Location>Manchester</Location>
    <Date>01-01-2020</Date>
    <Time>15u59m05s</Time>   
-<Max_25Hz>
    <25Hz1>0.9166</25Hz>
    <25Hz2>0.7979</25Hz>
</Max_25Hz>
-<Max_75Hz>
    <75Hz1>1.9659</75Hz>
    <75Hz2>1.4831</75Hz>
</Max_75Hz>
</Object>
  

Теперь я хотел бы записать данные в CSV-файл, который разделен табуляцией и выглядит следующим образом:

 ID          Location     Dateamp;Time            25Hz1     25Hz2        
Object_01   Manchester   01-01-2020 15:59:05  0.9166    0.7979     
  

Пожалуйста, обратите внимание, что дата и время разделены в XML-файле, но мне нужно, чтобы они были вместе в CSV-файле.

Это код, который я пробовал:

 import xml.etree.ElementTree as ET
import csv

root = r'c:dataFFDesktopmy_fileXML-filesObject_01.xml'
tree = ET.parse(root)
root = tree.getroot()

headers = ['ID', 'Location','Dateamp;Time','25Hz1','25Hz2']
with open ('new_XML_file.txt', 'w') as f:
     writer = csv.writer(f)
     for item in root.findall('Object'):
         row = []

         ID = item.find('Object').find('ID').text
         row.append(ID)

         location = item.find('Object').find('Location').text
         row.append(location)

         date = item.find('Object').find('Date').text   
         time = item.find('Object').find('Location').text
         date_time = date time
         row.append(location)

         var_25Hz1 = item.find('Max_25Hzt').find('25Hz1').text
         row.append(var_25Hz1 )

         var_25Hz2 = item.find('Max_25Hz').find('25Hz2').text
         row.append(var_25Hz2 )

         writer.writerow(headers)
         writer.writerow(row)
  

Я просто получаю пустой new_XML_file.txt ответ, никаких ошибок нет. Кто знает, что я делаю не так и как я могу это исправить?

Комментарии:

1. Правила для переменных Python: имя переменной должно начинаться с буквы или символа подчеркивания. Имя переменной не может начинаться с числа. Итак, вам нужно измениться 25Hz1 .

2. «никаких ошибок нет» Я так не думаю. Либо вы получаете синтаксические ошибки с этим кодом, либо код, который вы показываете здесь, не тот код, который вы используете.

3. Добавьте try и except в код…

4. Я отредактировал свой код. На самом деле не возникает никаких ошибок.

5. И вы проверили, что .findall('Object') на самом деле что-нибудь находит?

Ответ №1:

root В вашем примере object , поэтому, когда вы пишете: for item in root.findall('Object') вы ничего не находите.

Попробуйте:

 for item in root:
  

Комментарии:

1. ах, это правда .. но что, если я хочу искать ID внутри root?

2. root[0].text выполнит задание, но это уже другой вопрос