2017-03-22 1 views
1

J'utilise Pyrebase pour télécharger mes fichiers dans Firebase.Obtenir le fichier Excel après df.to_excel (...) avec Panda

J'ai un dataframe df et le convertir en un fichier Excel comme suit:

writer  = ExcelWriter('results.xlsx') 
excelFile = df.to_excel(writer,'Sheet1') 

print(excelFile) 

# Save to firebase 
childRef  = "path/to/results.xlsx" 

storage   = firebase.storage() 
storage.child(childRef).put(excelFile) 

Cependant, ce stocke le fichier Excel comme une feuille de calcul de bureau avec zéro octets. Si je cours writer.save() alors j'obtiens le type de fichier approprié (xlsx), mais il est stocké sur mon serveur (que je veux éviter). Comment puis-je générer le bon type de fichier comme on le ferait avec writer.save()?

Note: print(excelFile) retours None

Répondre

1

Il peut être résolu en utilisant la mémoire locale:

# init writer 
bio   = BytesIO() 
writer  = pd.ExcelWriter(bio, engine='xlsxwriter') 
filename = "output.xlsx" 

# sheets 
dfValue.to_excel(writer, "sheetname") 

# save the workbook 
writer.save() 
bio.seek(0)  

# get the excel file (answers my question)   
workbook = bio.read() 
excelFile = workbook 

# save the excelfile to firebase 
# see also issue: https://github.com/thisbejim/Pyrebase/issues/142 
timestamp  = str(int(time.time()*1000)); 
childRef  = "/path/to/" + filename 

storage   = firebase.storage() 
storage.child(childRef).put(excelFile) 
fileUrl   = storage.child(childRef).get_url(None) 
0

Selon la documentation, vous devez ajouter

writer.save() 

source

+0

oui, mais alors il l'enregistre sur mon serveur. Je veux seulement obtenir l'objet Excel dans ma mémoire (à court terme) et l'utiliser pour le stocker sur Firebase et pas sur mon serveur. E.g. Lorsque vous utilisez FileReader en Javascript, il crée un fichier blob. Cela vous pouvez entrer pour enregistrer en externe. – JohnAndrews

+0

Pouvez-vous alors essayer 'storage.child (childRef) .put (writer.save())' – philshem

+0

Essayé. Ne fonctionne pas J'ai également essayé .put (df) mais cela n'a pas fonctionné. Il doit y avoir un moyen d'obtenir l'objet fichier. – JohnAndrews