2009-12-10 36 views
9

Tôi đã quen với C++ và tôi xây dựng các lớp/chức năng xử lý dữ liệu của mình để xử lý các đối tượng luồng thay vì tệp. Tôi muốn biết làm thế nào tôi có thể sửa đổi các mã sau đây, để nó có thể xử lý một dòng dữ liệu nhị phân trong bộ nhớ, chứ không phải là một tập tin xử lý.Sử dụng Python, làm cách nào để đọc/ghi dữ liệu trong bộ nhớ như tôi làm với một tệp?

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 

Trong trường hợp này, mã giả self.file là một tập tin, mở như vậy:

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

Làm thế nào tôi có thể sử dụng cùng mã, tuy nhiên thay vì làm một cái gì đó như thế này:

file = get_binary_data() 

Trường hợp get_binary_data() trả về một chuỗi dữ liệu nhị phân. Mặc dù mã không hiển thị nó, tôi cũng cần ghi vào luồng (Tôi không nghĩ rằng nó đáng để đăng mã cho điều đó).

Ngoài ra, nếu có thể, tôi cũng muốn mã mới xử lý tệp.

Trả lời

16

Bạn có thể sử dụng phiên bản StringIO.StringIO (hoặc cStringIO.StringIO, nhanh hơn) để cung cấp giao diện giống như tệp cho dữ liệu trong bộ nhớ.

+1

_the trên liên kết đề cập không làm việc vì ("StringIO và cStringIO" bây giờ đã mất hết trong Python 3.0. Họ chỉ tồn tại trong 2.0. Io đã thay thế chúng trong 3.0 ") _ Xin lỗi cho bình luận này, nhưng có vẻ như một truyền thống cho câu trả lời này ... – tampe125

5

Có một cái nhìn tại 'StringIO' (Đọc và viết chuỗi như file)

+0

liên kết được đề cập ở trên không hoạt động vì (" StringIO và cStringIO "hiện đã biến mất trong Python 3.0. Chúng chỉ tồn tại ở 2.0. chúng trong 3.0 "). – Bhavana

5

Sử dụng StringIO.

+0

liên kết được đề cập ở trên không hoạt động vì ("StringIO và cStringIO" hiện đã biến mất trong Python 3.0. Chúng chỉ tồn tại ở 2.0. Io đã thay thế chúng ở 3.0 "). – Bhavana

6

Hãy xem mô-đun StringIO của Python, docs here, có thể là khá nhiều những gì bạn đang theo dõi.

+0

liên kết được đề cập ở trên không hoạt động vì (" StringIO và cStringIO "giờ đã biến mất trong Python 3.0. Chúng chỉ tồn tại ở 2.0. io đã thay thế chúng trong 3.0"). – Bhavana

1

Tôi thích thời gian của câu trả lời. (trừ mỏ)

Chúng tôi có thể thấy thời gian phản hồi bằng mili giây?

of-nhiên StringIO

Các vấn đề liên quan