Почему моя утилизация продолжает отправлять мне RuntimeError: Invalid uid? - PullRequest
0 голосов
/ 29 мая 2020

Пытаясь очистить данные из базы данных 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

После нескольких исследований вот различные неудачные решения, которые я пробовал:

  1. Сначала я изменил ключ API.
  2. Я удалил time.sleep (0.01), который изначально был включен в скрипт.
  3. Я удалил строки, удаляющие временные переменные, которые у меня были изначально, чтобы избежать перегрузки ОЗУ. Вот удаленные строки:

       auteur_pmid_doi.append([ligne[0], pmid_doi]) 
    
            del (ligne[1])
            del (handle)
            del (record)
            del (pmid_doi)
    

    auteur_pmid_doi

  4. At наконец, я добавил исключение для ошибки RunTime, но это было не очень разумное решение. Я попробовал это только потому, что был в отчаянии. Программа не отправила обратно ошибку RunTime, но она казалась просто зависшей на всю ночь.

Если вы можете любезно Помогите мне, потому что я занимаюсь этим неделю, буду очень признателен.

...