2016-02-20 21 views
-1

我需要使字符串被bibtexparserparsing_read讀取。據我瞭解,模塊,它只讀取文件,而不是流,所以我做了:使用io.StringIO讀取字符串作爲文件

text = "Some text" 
with open("/tmp/bibtmp.bib", "w") as bibfile: 
    bibfile.write(text) 
self.parsing.parsing_read("/tmp/bibtmp.bib") 

但是,我想,使其讀取字符串,並試圖io.StringIO模塊:

fakefile = io.StringIO("SomeText") 
self.parsing.parsing_read(fakefile) 

這是給錯誤(從self.parsing.parsing_read,這將打開文件):

TypeError: invalid file: <_io.StringIO object at 0x7fb4d6537ca8> 

所以,很顯然,fakefile是io.StringIO,而不是Fake文件。我的理解io.StringIO的目的不對?或者只是做錯了?

+1

一個臨時文件可能更適合https://docs.python.org/2/library/tempfile.html,你有一個NamedTemporaryFile –

+0

你猜的。名稱attibute成爲「假」文件?一個對象*是一個文件,或者它不是(它可以像文件一樣,例如流)。從[dox](https://docs.python.org/2/library/io.html)中,'io.StringIO'類爲unicode文本提供*內存流* –

+1

您可能還想鏈接到包含'parsing_read'的文檔 –

回答

1

基於從bibtexparser類的文檔,我認爲你應該使用.loads方法,它從輸入字符串或Unicode返回BibDatabase對象。 (這不同於load方法,其確實需要一個文件對象)

https://bibtexparser.readthedocs.org/en/v0.6.2/_modules/bibtexparser.html#loads

bibtexparser.loads(bibtex_str, parser=None)

負載BibDatabase對象從一個字符串

參數:

  • bibtex_str(STR或Unicode) - 輸入中文提供待分析的字符串
  • 解析器(BibTexParser) - 定製解析器使用(可選)

返回:

  • 文獻數據庫對象

返回類型:

  • BibDatabase