View Full Version : Python excel
Maniscalco
22-11-2011, 12:55
Ciao a tutti
sto facendo un piccolo script in python che deve eseguire questi passaggi:
aprire un excel
copiare una cella specifica e effettuare una ricerca su un db
copiare il contenuto della richiesta del db in una variabile
salvare la variabile su un txt
aprire il txt e mettere ogni riga del txt in una variabile diversa
salvare le varibili su un nuovo excel.
riesco a fare tutto.
il problema è che quando vado a copiare i valori importati dallo script su un file di testo, i valori risultano in questo modo:
"valore"
anche se all'apparenza sull'excel non ci sono le virgolette.
come posso risolvere secondo voi?
a, ho utilizzato per il tutto xlrd e urllib
cdimauro
22-11-2011, 14:22
Puoi riportare la parte di codice che si occupa di scrivere sul file di testo?
Maniscalco
22-11-2011, 15:57
certo
una volta fatta la richiesta dal db inserisco il tutto in una variabile chiamata "the_page"
file = open('C:\Users\danilo\Desktop\provapy.txt', 'w')
file.write(the_page)
file.close()
e metto nella variabile "DATI" quello che mi serve
file=open('C:\Users\danilo\Desktop\provapy.txt','r')
DATI=file.readlines()[0]
file.close()
cdimauro
22-11-2011, 17:52
Fai una prova così:
file = open('C:\Users\danilo\Desktop\provapy.txt', 'w')
file.write(the_page)
print 'DATO:', repr(the_page), '!'
file.close()
E riporta esattamente la stringa che manda in output. Così vediamo un po' la vera natura di quei dati.
Maniscalco
23-11-2011, 09:55
intanto grazie per la risposta tempestiva ;)
allora provando con la tua parte di codice il risultato è il seguente
il print su schermo riporta questo:
'83313340460\n'
il print sul file di testo è questo:
83313340460
ed ho provato a farlo incollare anche sulla cella excel e mi riporta questo:
"83313340460"
il problema che ho notato è che se richiedo i dati dal db mi da questo problema. Invece se la variabile la riempio a mano, cioè:
the_page = "ciao"
allora non mi da problemi.
cdimauro
23-11-2011, 12:00
Probabilmente l'errore sta nel carattere '\n'.
Infatti the_page contiene '83313340460\n' e non soltanto '83313340460'.
Il che può benissimo starci, perché se vuoi suddividere i dati scritti riga per riga, è indispensabile che nel file di testo venga memorizzato anche questo carattere.
A questo punto puoi risolvere il problema in fase di lettura, eliminando il '\n' così:
DATI=file.readlines()[0].replace('\n', '')
Maniscalco
23-11-2011, 12:53
Funziona!
sei un grande!!!
saranno 2 settimane che mi ero fermato in quel punto :D
a questo punto ti faccio un altra domanda inerente.
quando vado a popolare le celle in excel, non so perchè mi toglie tutta la formattazione del file, quindi tutte le formule i concatena ed il resto, sai darmi qualche dritta?
Grazie ancora
cdimauro
23-11-2011, 13:12
Di nulla. :)
Avevi detto che creavi un file Excel nuovo al termine dell'elenco di azioni che hai descritto prima. E' chiaro che se il file è nuovo, non avrà alcuna formattazione.
Altrimenti non ho capito bene il tuo problema, e mi servirebbero altre informazioni.
Maniscalco
23-11-2011, 16:23
hai perfettamente ragione
il file excel non è nuovo ma è già ricco di altri dati
io per scrivere sul file uso queste stringhe:
MyFile = xlrd.open_workbook(r'C:\Users\danilo\Desktop\python_test\file.xls')
MyFile_mod = copy(MyFile)
MyFile = MyFile.sheet_by_name(u'sheet1')
MyFile_mod.get_sheet(0).write(a, 120, DATI)
MyFile_mod.save(r'C:\Users\danilo\Desktop\python_test\file.xls')
cdimauro
23-11-2011, 18:21
Purtroppo non conosco xlrd.
Devi vedere se c'è un metodo per estrarre lo "stile" o, in generale, i metadati di una cella, e se è possibile passarlo/i al metodo write.
A naso direi che qualcosa del genere debba esistere, perché mi pare un'esigenza comune / normale.
Maniscalco
20-12-2011, 15:45
una info
per leggere 2 dati e metterli in variabili separate faccio di questo:
file=open('C:\Users\danilo\Desktop\provapy.txt','r')
DATI=file.readlines()[0].replace('\n', '')
file.close()
file=open('C:\Users\danilo\Desktop\provapy.txt','r')
DATI2=file.readlines()[1].replace('\n', '')
file.close()
se invece provo a fare questo:
file=open('C:\Users\danilo\Desktop\provapy.txt','r')
DATI=file.readlines()[0].replace('\n', '')
DATI2=file.readlines()[1].replace('\n', '')
file.close()
python mi risponde:
IndexError: list index out of range
>>>
è possibile che per leggere due dati devo aprire e chiudere il file 2 volte?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.