Es posible crear un fichero tar objeto en la memoria que el uso de un tampón que contiene el alquitrán de datos sin tener que escribir el fichero tar a disco y abrirlo de nuevo? Tenemos los bytes enviados a través de un socket.

Algo como esto:

import tarfile
byte_array = client.read_bytes()
tar = tarfile.open(byte_array) # how to do this?
# use "tar" as a regular TarFile object
for member in tar.getmembers():
    f = tar.extractfile(member)
    print(f)

Nota: una de las razones para hacer esto es que, finalmente, quiere ser capaz de hacer esto con varios subprocesos simultáneamente, por lo que mediante un archivo temporal podría ser anulado si dos hilos tratar de hacerlo al mismo tiempo.

Gracias por cualquier ayuda!

InformationsquelleAutor Sefu | 2013-04-07

2 Comentarios

  1. 28

    BytesIO() de Módulo IO hace exactamente lo que usted necesita.

    import tarfile, io
    byte_array = client.read_bytes()
    file_like_object = io.BytesIO(byte_array)
    tar = tarfile.open(fileobj=file_like_object)
    # use "tar" as a regular TarFile object
    for member in tar.getmembers():
        f = tar.extractfile(member)
        print(f)
    • puede que tenga que agregar el modo, dependiendo de lo que estás haciendo (archivo en un archivo) el fichero tar.abierto(fileobj=byte_stream, modo=’r:gz’)
    • ^ exactamente. Yo había llegado a fileobj=file_like_object y no estaba haciendo mode= acaba de dar el modo de que no es válida para python x0 (que son todos los argumentos posicionales, pero los documentos muestran "filename", "r:gz" — si usted está utilizando cosas de memoria que se necesita para fileobj=..., mode=... explícitamente!
  2. 6

    Seguro, algo como esto:

    import io
    
    io_bytes = io.BytesIO(byte_array)
    
    tar = tarfile.open(fileobj=io_bytes, mode='r')

    (Ajustar mode para que se ajuste el formato de su archivo tar, por ejemplo, posiblemente el » modo=’r:gz’, etc.)

Dejar respuesta

Please enter your comment!
Please enter your name here