PDA

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?