使用python在Bio Entrez中过滤/访问日期

时间:2015-06-01 17:48:34

标签: python text pubmed

我有一份标准清单(发表论文的名称和日期范围),以获取已发表论文的清单。我正在使用Biopython的Bio Entrez从Entrez获得论文。

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

 [{'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'}]

现在输出看起来像这样

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')  

我尝试使用Efetch,它并不总是具有我理解的xml输出。我以为我可以通过解析xml来过滤日期

   File "<ipython-input-39-13bcded12392>", line 2, in <module>
    handle = open(paper)

  TypeError: coercing to Unicode: need string or buffer, ListElement found

我收到错误:        回溯(最近一次调用最后一次):

datestart=20130601
dateend=20130705

for (( date1="$datestart"; date1 != dateend; )); do
    date1="$(date --date="$date1 + 1 days" +'%Y%m%d')";
    echo $date1;
done

我觉得我错过了一些东西,我应该能够直接将它提供给查询。我也不明白为什么这种方法不起作用,即使这似乎是一种更难的方法。有一个更好的方法吗?我尝试使用xml.etree这样做,但我也有类似的错误。

1 个答案:

答案 0 :(得分:1)

您不需要open(paper)paper已经是Python dict(基本上是JSON)。如果您想要接受日期,可以像这样访问:

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