Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python过滤/访问Bio-Entrez pubmed中的日期_Python_Text_Pubmed - Fatal编程技术网

用python过滤/访问Bio-Entrez pubmed中的日期

用python过滤/访问Bio-Entrez pubmed中的日期,python,text,pubmed,Python,Text,Pubmed,我有一个标准列表(论文发表的名称和日期范围)来获取已发表论文的列表。我用Biopython的Bio Entrez从Entrez那里获取论文 我可以按作者姓名查询并获得结果,但我不知道如何处理数据以获取其中的日期。这就是我所做的: handle = Entrez.esearch(db="pubmed", term = "" ) result = Entrez.read(handle) handle.close() ids = result['IdList'] print ids #for each

我有一个标准列表(论文发表的名称和日期范围)来获取已发表论文的列表。我用Biopython的Bio Entrez从Entrez那里获取论文

我可以按作者姓名查询并获得结果,但我不知道如何处理数据以获取其中的日期。这就是我所做的:

handle = Entrez.esearch(db="pubmed", term = "" )
result = Entrez.read(handle)
handle.close()
ids = result['IdList']
print ids
#for each ids go through it and pull the summary
for uid in ids:
     handle2 = Entrez.esummary(db="pubmed", id=uid, retmode= "xml")
     result2 = Entrez.read(handle2)
     handle2.close()
现在输出如下所示

 [{'DOI': '10.1016/j.jmoldx.2013.10.002', 'Title': 'Validation of a next-generation sequencing assay for clinical molecular oncology.', 'Source': 'J Mol Diagn', 'PmcRefCount': 7, 'Issue': '1', 'SO': '2014 Jan;16(1):89-105', 'ISSN': '1525-1578', 'Volume': '16', 'FullJournalName': 'The Journal of molecular diagnostics : JMD', 'RecordStatus': 'PubMed - indexed for MEDLINE', 'ESSN': '1943-7811', 'ELocationID': 'doi: 10.1016/j.jmoldx.2013.10.002', 'Pages': '89-105', 'PubStatus': 'ppublish+epublish', 'AuthorList': ['Cottrell CE', 'Al-Kateb H', 'Bredemeyer AJ', 'Duncavage EJ', 'Spencer DH', 'Abel HJ', 'Lockwood CM', 'Hagemann IS', "O'Guin SM", 'Burcea LC', 'Sawyer CS', 'Oschwald DM', 'Stratman JL', 'Sher DA', 'Johnson MR', 'Brown JT', 'Cliften PF', 'George B', 'McIntosh LD', 'Shrivastava S', 'Nguyen TT', 'Payton JE', 'Watson MA', 'Crosby SD', 'Head RD', 'Mitra RD', 'Nagarajan R', 'Kulkarni S', 'Seibert K', 'Virgin HW 4th', 'Milbrandt J', 'Pfeifer JD'], 'EPubDate': '2013 Nov 6', 'PubDate': '2014 Jan', 'NlmUniqueID': '100893612', 'LastAuthor': 'Pfeifer JD', 'ArticleIds': {'pii': 'S1525-1578(13)00219-5', 'medline': [], 'pubmed': ['24211365'], 'eid': '24211365', 'rid': '24211365', 'doi': '10.1016/j.jmoldx.2013.10.002'}, u'Item': [], 'History': {'received': '2013/02/04 00:00', 'medline': ['2014/08/30 06:00'], 'revised': '2013/08/23 00:00', 'pubmed': ['2013/11/12 06:00'], 'aheadofprint': '2013/11/06 00:00', 'accepted': '2013/10/01 00:00', 'entrez': '2013/11/12 06:00'}, 'LangList': ['English'], 'HasAbstract': 1, 'References': ['J Mol Diagn. 2014 Jan;16(1):7-10. PMID: 24269227'], 'PubTypeList': ['Journal Article'], u'Id': '24211365'}]
我尝试过使用Efetch,它并不总是有我所理解的xml输出。我想我可以通过解析xml来过滤日期

proj_start = '2009 Jan 01'
proj_start = time.strptime(proj_start, '%Y %b %d')
for paper in results2:
    handle = open(paper)
    record = Entrez.read(handle)
    pub_dat=time.strptime(record["EPubDate"], '%Y %b %d')  
我得到一个错误: 回溯(最近一次呼叫最后一次):

文件“”,第2行,在
手柄=打开(纸张)
TypeError:强制使用Unicode:需要字符串或缓冲区,找到ListElement

我觉得我遗漏了一些东西,我应该能够将其直接输入到查询中。我也不明白为什么这个方法不起作用,尽管它似乎是一个更难做到这一点的方法。有更好的方法吗?我尝试使用xml.etree来实现这一点,但也遇到了类似的错误

您不需要
打开(纸张)
纸张
已经是Python
dict
(基本上是JSON)。如果您想要接受的日期,可以按如下方式访问:

paper['History']['accepted']
'2013/10/01 00:00'

我现在得到一个错误“列表索引必须是整数,而不是str”您可以这样访问它:print(记录['MedlineCitation']['DateCompleted']['Year'])(或者您需要的任何部分)
paper['History']['accepted']
'2013/10/01 00:00'