2009-12-10 130 views
9

我習慣了C++,並且構建了我的數據處理類/函數來處理流對象而不是文件。我想知道如何修改下面的代碼,以便它可以處理內存中的二進制數據流,而不是文件句柄。使用Python,我如何在內存中讀取/寫入數據,就像使用文件一樣?

def get_count(self): 
    curr = self.file.tell() 
    self.file.seek(0, 0) 
    count, = struct.unpack('I', self.file.read(c_uint32_size)) 
    self.file.seek(curr, 0) 
    return count 

在這種情況下,該代碼假定self.file是一個文件,打開像這樣:

file = open('somefile.data, 'r+b') 

我怎麼可能使用相同的代碼,但不是做這樣的事情:

file = get_binary_data() 

其中get_binary_data()返回一串二進制數據。雖然代碼沒有顯示出來,但我還需要寫入流(我認爲不值得爲此發佈代碼)。

另外,如果可能的話,我想新的代碼來處理文件。

回答

16

您可以使用StringIO.StringIO(或更快的cStringIO.StringIO)的實例爲內存中的數據提供文件類接口。

+1

_The上述鏈接不起作用,因爲( 「StringIO的和cStringIO」 已經消失在Python 3.0,他們只在2.0存在。IO取代了它們在3.0 「)_對不起這個評論,但它似乎是這個答案的傳統...... – tampe125 2017-01-12 13:56:53

5

看一看'StringIO'(讀取和寫入字符串作爲文件)

+0

上述鏈接不起作用,因爲(」StringIO和cStringIO「現在已經在Python 3.0中消失了,它們只存在於2.0中,io已經替換他們在3.0「)。 – Bhavana 2016-07-22 06:23:55

5

使用StringIO

+0

上面提到的鏈接不起作用,因爲(「StringIO和cStringIO」現在已經在Python 3.0中消失了,它們只存在於2.0中,io已經在3.0中替代了它們) – Bhavana 2016-07-22 06:23:58

6

看看Python的StringIO模塊,docs here,這可能幾乎是你所追求的。

+0

上述鏈接不起作用,因爲(「StringIO和cStringIO「現在已經在Python 3.0中消失了,它們只存在於2.0中,io已經在3.0中替代了它們)。 – Bhavana 2016-07-22 06:23:28

1

我喜歡答案的時間。 (我的除外)

我們可以看到以毫秒爲單位的響應時間?

的課程StringIO

相關問題