Я начал изучать Python несколько дней go, чтобы построить базовый c сайт для сбора статистики из проектов BOIN C, например, SETI@home et c.
В основном сайт делает:
- Загрузка файлов gz
- Распаковка файлов gz в xml файлы
- Встраивание xml информации в структуры данных
- Запись структур данных обратно в файлы cvs
Всего 34 файла .gz из 34 различных проектов BOIN C.
Весь код теперь завершен и работает, однако файл .gz из одного проекта отказывается анализировать, тогда как остальные 34 работают нормально.
Файл:
user.gz
из
http://www.rnaworld.de/rnaworld/stats/
Вот ошибки, которые я получаю:
Traceback (most recent call last):
File "C:/Users/chris/PycharmProjects/testproject1/rnaw100.py", line 77, in <module>
for event, elem in ET.iterparse(str(x_file_name2), events=("start", "end")):
File "C:\Users\chris\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 1227, in iterator
yield from pullparser.read_events()
File "C:\Users\chris\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 1302, in read_events
raise event
File "C:\Users\chris\AppData\Local\Programs\Python\Python38-32\lib\xml\etree\ElementTree.py", line 1274, in feed
self._parser.feed(data)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 0
Это код, который загружает файл .gz и разбирает XML: (я пропустил объявления var et c)
Как новичок ie Мне трудно понять, что не так, поскольку (а) ошибки относятся к Python файлу ядра например, ElementTree.py и (б) я не могу понять, почему не работает файл .gz, который используют многие другие сайты статистики BOIN C, и (c), почему мой код работает с 34 файлами, но не это 1.
response = requests.get(url2, stream=True)
if response.status_code == 200:
with open(target_path2, 'wb') as f:
f.write(response.raw.read())
with gzip.open(target_path2, 'rb') as f_in:
with open(x_file_name2, 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
for event, elem in ET.iterparse(str(x_file_name2), events=("start", "end")):
if elem.tag == "total_credit" and event == "end":
tc=float(elem.text)
elem.clear
if elem.tag == "expavg_credit" and event == "end":
ac=float(elem.text)
elem.clear
if elem.tag == "id" and event == "end":
id=elem.text
elem.clear
if elem.tag == "cpid" and event == "end":
cpid=elem.text
elem.clear
if elem.tag == "name" and event == "end":
name = elem.text
elem.clear()
teamid=TEAMID
if elem.tag == "teamid" and event == "end":
if elem.text == TEAMID:
cnt=cnt+1
dic[id]={"Name":name,"CPID":cpid, "TC":tc, "AC":ac}
elem.clear()