Пытаясь очистить данные из базы данных NCBI, я продолжаю получать подписанное сообщение об ошибке. Я уже пробовал этот код на небольшом количестве данных, и он работал хорошо. Но когда я запускаю его для общих данных, включенных в следующий csv https://drive.google.com/file/d/1VtSkkBhDJKvciVsHNnqnUSKKKlBM880F/view?usp=sharing, я получаю следующее сообщение об ошибке:
RuntimeError: Invalid uid
9174794 at position=0.
Вот мой код (удаление начинается только с ligne "for pmid in ligne [1]:":
auteur_pmid_doi = []
# Clean up encoded data in 'utf-8'
with open("pmid_par_auteur_uniformise.csv",encoding='utf-8') as fu:
csv_fu = csv.reader(fu)
for ligne in csv_fu:
ligne[1] = ligne[1].replace("'", " ")
ligne[1] = ligne[1].replace("[", " ")
ligne[1] = ligne[1].replace("]", " ")
ligne[1] = ligne[1].split(" , ")
pmid_doi = []
for pmid in ligne[1]:
try :
handle = Entrez.esummary(db="pubmed", id=pmid)
record = Entrez.read(handle)
record = record[0]['DOI']
except IndexError :
print ('Missing DOI')
except KeyError :
print ('Missing DOI')
else :
pmid_doi.append([pmid, record])
auteur_pmid_doi.append([ligne[0], pmid_doi])
auteur_pmid_doi
И вот сообщение об ошибке, которое я продолжаю получать:
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-2-6761bf5cc833> in <module>
25 try :
26 handle = Entrez.esummary(db="pubmed", id=pmid)
---> 27 record = Entrez.read(handle)
28 record = record[0]['DOI']
29 except IndexError :
~\anaconda3\lib\site-packages\Bio\Entrez\__init__.py in read(handle, validate, escape)
485
486 handler = DataHandler(validate, escape)
--> 487 record = handler.read(handle)
488 return record
489
~\anaconda3\lib\site-packages\Bio\Entrez\Parser.py in read(self, handle)
343 handle = BytesIO(_as_bytes(handle.read()))
344 try:
--> 345 self.parser.ParseFile(handle)
346 except expat.ExpatError as e:
347 if self.parser.StartElementHandler:
c:\ci\python_1578510570019\work\modules\pyexpat.c in EndElement()
~\anaconda3\lib\site-packages\Bio\Entrez\Parser.py in endErrorElementHandler(self, name)
694 # error found:
695 value = "".join(self.data)
--> 696 raise RuntimeError(value)
697 # no error found:
698 if self.element is not None:
RuntimeError: Invalid uid
9174794 at position=0
После нескольких исследований вот различные неудачные решения, которые я пробовал:
- Сначала я изменил ключ API.
- Я удалил time.sleep (0.01), который изначально был включен в скрипт.
Я удалил строки, удаляющие временные переменные, которые у меня были изначально, чтобы избежать перегрузки ОЗУ. Вот удаленные строки:
auteur_pmid_doi.append([ligne[0], pmid_doi])
del (ligne[1])
del (handle)
del (record)
del (pmid_doi)
auteur_pmid_doi
At наконец, я добавил исключение для ошибки RunTime, но это было не очень разумное решение. Я попробовал это только потому, что был в отчаянии. Программа не отправила обратно ошибку RunTime, но она казалась просто зависшей на всю ночь.
Если вы можете любезно Помогите мне, потому что я занимаюсь этим неделю, буду очень признателен.