2009-12-10 21 views
9

Estoy acostumbrado a C++, y construyo mis clases/funciones de manejo de datos para manejar objetos de transmisión en lugar de archivos. Me gustaría saber cómo podría modificar el siguiente código, para que pueda manejar una secuencia de datos binarios en memoria, en lugar de un manejador de archivo.Usando Python, ¿cómo puedo leer/escribir datos en la memoria como lo haría con un archivo?

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 

En este caso, el código se supone self.file es un archivo, abierto de esta manera:

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

¿Cómo puede usar el mismo código, sin embargo, en vez de hacer algo como esto:

file = get_binary_data() 

Donde get_binary_data() devuelve una cadena de datos binarios. Aunque el código no lo muestra, también necesito escribir en la transmisión (no creo que valga la pena publicar el código para eso).

Además, si es posible, me gustaría que el nuevo código maneje los archivos también.

Respuesta

16

Puede usar una instancia de StringIO.StringIO (o cStringIO.StringIO, más rápido) para proporcionar una interfaz tipo archivo a los datos en memoria.

+1

_la el enlace de arriba mencionado no funciona debido a que ("StringIO y cStringIO" se han ido en Python 3.0. Existen solamente en 2.0. Io les ha sustituido en 3,0 ") _ Lo siento por este comentario, pero parece una tradición para esta respuesta ... – tampe125

5

Tenga una mirada en 'StringIO' (lectura y escritura cadenas como archivos)

+0

el enlace mencionado anteriormente no funciona porque (" StringIO y cStringIO "ahora se han ido en Python 3.0. Existen solo en 2.0. Io ha reemplazado ellos en 3.0 "). – Bhavana

5

Uso StringIO.

+0

el enlace mencionado anteriormente no funciona porque ("StringIO y cStringIO" ahora se han ido en Python 3.0. Existen solo en 2.0. Io ha reemplazado en 3.0 "). – Bhavana

6

Eche un vistazo al módulo StringIO de Python, docs here, que podría ser más o menos lo que está buscando.

+0

el enlace mencionado anteriormente no funciona porque (" StringIO and cStringIO "ya no están en Python 3.0. Solo existen en 2.0. io los ha reemplazado en 3.0"). – Bhavana

1

Me gusta el tiempo de la respuesta. (excepto el mío)

Podemos ver el tiempo de respuesta en milisegundos?

de curso StringIO

Cuestiones relacionadas