2012-06-26 64 views
5

Ninguno de estos procesos, como era de esperar la lectura de la documentación:archivos de cierre en openpyxl

worksheet.close() 
workbook.close() 

¿Hay una manera de cerrar los archivos Una vez hecho esto en openpyxl? ¿O se maneja automáticamente cuando se cierra el programa? No quiero dejar hojas de cálculo en la memoria.

Respuesta

9

bien que se puede echar un vistazo al código fuente, Im usando actualmente 1.5.5 como tal

def load_workbook(filename, use_iterators=False):   
    if isinstance(filename, file): 
     # fileobject must have been opened with 'rb' flag 
     # it is required by zipfile 
     if 'b' not in filename.mode: 
      raise OpenModeError("File-object must be opened in binary mode") 

    try: 
     archive = ZipFile(filename, 'r', ZIP_DEFLATED) 
    except (BadZipfile, RuntimeError, IOError, ValueError), e: 
     raise InvalidFileException(unicode(e)) 
    wb = Workbook() 

    if use_iterators: 
     wb._set_optimized_read() 

    try: 
     _load_workbook(wb, archive, filename, use_iterators) 
    except KeyError, e: 
     raise InvalidFileException(unicode(e)) 
    finally: 
     archive.close() 
    return wb 

parece que sí lo hace cerrar el archivo, cuando cargamos un libro, ¿qué tal cuando guardarlo?

def save(self, filename): 
    """Write data into the archive.""" 
    archive = ZipFile(filename, 'w', ZIP_DEFLATED) 
    self.write_data(archive) 
    archive.close() 

Parece que también cierra el archivo cuando lo guardamos.

Fundamentalmente, leemos un libro de Excel en la memoria de un archivo que se cierra después, realizamos actualizaciones, si no lo guardamos, los cambios se pierden presumiblemente, si lo guardamos, el archivo se cierra después de la escritura.

¿Hay alguna manera de cerrar los archivos una vez hecho en openpyxl? ¿O se maneja automáticamente cuando se cierra el programa? No quiero dejar hojas de cálculo en la memoria.

puede guardar los cambios en el uso de wb.save(filename = dest_filename) como para handled automatically cuando readin o escribir en un archivo, entonces sí está cerrado después de la operación, pero tener openpyxl automáticamente guardar los cambios a continuación sinclass Workbook(object): es que no tiene __del__ entonces nada se invoca cuando se elimina ese objeto o se recolecta basura, nuevamente esto es para 1.5.5, la versión actual es 1.5.8 al momento de escribir este documento, dudo que mucho haya cambiado.

+0

hm muy interesante. La versión actual es en realidad 1.5.8, pero sí, dudo que haya algo diferente. Supongo que dejarlo será suficiente, ya que no quiero hacer/guardar ningún cambio, solo estoy leyendo datos, ¡así que esto funcionará para mí! – zakparks31191

+0

Me disculpo, estaba leyendo http://packages.python.org/openpyxl/ Supongo que está desactualizado o algo así, he corregido mi publicación, gracias, y sí, si solo estás leyendo, entonces no tienes que hacer cualquier cosa. –

+0

sí, las últimas versiones están en pypi: http://pypi.python.org/pypi/openpyxl/1.5.8 – zakparks31191