caricamento dati da excel con python

Messaggioda mic_1 » 13/06/2019, 10:53

Ciao a tutti!
Sono alle prime armi con python. Sto provando a caricare e rielaborare dati da file excel.
Non so se faccio bene ma vado a leggere tutte le righe per ogni colonna e le confronto in modo da non riportare doppioni ma cicla solo la prima colonna.
Ho usato sheet.ncols ma nonostante tutto solo la prima colonna viene presa in considerazione.
Il mio file dati era in txt ma le info non erano ordinate per cui ho pensato di riodinarle su excel e poi cercare i dati che mi interessano (sono elenco delle interazioni tra proteine).

Ho creato poi una seconda scheda excel su cui scrivere i risultati della elaborazione ma non sheet.write() non scrive ahimè, per cui per velocizzare ho creato un file txt.

Oltre ad individuare i singoli nodi ho contato pure le interazioni(il grado per ciascun nodo) ma purtroppo non riuscendo a ciclare con il FOR per tutte le colonne non ho potuto distinguere i 4 tipi di interazioni per ciascun nodo.

Mi potreste dare qualche dritta e magari correggermi gli sbagli? Non vorrei perdermi in codice che magari scritto in altro modo è più rapido e di qualità.

Grazie a chiunque mi risponderà!

PS: Una volta elaborati i dati dovrò caricare in matrice le informazioni necessarie per il calcolo statistico.
PS2: Mi viene sovrascitta la riga anzichè riportare le righe una sotto l'altra. Non so come correggere. Potreste aiutarmi? Vorrei caricare qui i file .py e .xlsx Come fare?
Grazie
mic_1
Junior Member
Junior Member
 
Messaggio: 123 di 133
Iscritto il: 11/01/2011, 19:11

Re: caricamento dati da excel con python

Messaggioda mic_1 » 13/06/2019, 12:13

Ho provato anche a riordinare il file .txt su excel ma le righe vendono sovrapposte in fase di scrittura sempre sulla prima riga.
mic_1
Junior Member
Junior Member
 
Messaggio: 124 di 133
Iscritto il: 11/01/2011, 19:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 13/06/2019, 23:25

Senza informazioni più precise su quello che stai cercando di fare è difficile capire dove tu stia sbagliando. Prova a copiare il tuo codice in un post.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5232 di 5239
Iscritto il: 08/12/2008, 21:37
Località: Londra

Re: caricamento dati da excel con python

Messaggioda mic_1 » 14/06/2019, 12:49

RIPORTO QUI IL CODICE. COME POSSO CARICARE IL FILE .TXT?
Codice:
# mypath should be the complete path for the directory containing the input text files

mypath = 'C:/Users/Michela/Desktop/eserc_python/PROVA_IMPORT/prova1/NetCart'

from os import listdir
from os.path import isfile, join
textfiles = [ join(mypath,f) for f in listdir(mypath) if isfile(join(mypath,f)) and '.txt' in  f]

#import xlwt
import xlrd
from xlwt import Workbook
from os.path import exists
import time
import os
#import xlsxwriter

# controllo l'esistenza dei file. Se esistono li elimino
if(exists('generated_xls.xls' and 'log1.txt')):
    os.remove('generated_xls.xls')
    os.remove('log1.txt')
    time.sleep(2)

# apro il file .txt e la riorganizzo in un file .xlsx
for textfile in textfiles:
    f = open(textfile, 'r+', encoding='utf-8')
    row_list = [] 
    for string in f:   
        s = string.split()
        t = s[0]
        q = s[1]
        r = s[2]
        str = [t,q,r]
        column_list = zip(str)

        wb = Workbook()
        sheet = wb.add_sheet('Sheet1')
        sheet2 = wb.add_sheet('Sheet2')
        i=0 
        for column in column_list:
            for item in range(len(column)):       #purtroppo viene sovrascitta la 1a riga         
                sheet.write(item, i, column[item])
            wb.save(join(mypath, 'generated_xls.xls'))
            i+=1         
    f.close()   
     
# Per fare la prova continuo importando manualmente i dati.
# Apro il file .xlsx, leggo le righe controllando che l'argomento non sia lo stesso.
# Questo mi consente di contare il numero dei nodi, il numero di link per ogni nodo.
# Vorrei poter ciclare anche sulla seconda colonna per verificare il numero di
# ciascuna interazione.
wb1 = xlrd.open_workbook('network.xlsx')
sheet3 = wb1.sheet_by_index(0)

y = sheet3.ncols
x = sheet3.nrows
fx = open('log1.txt','w+', encoding='utf-8')
for column in range(0,y):
    countLINK = 1
    count_LINK = 1
    for rows in range(0,x):       
        A = sheet3.cell_value(rows,column)
        B = sheet3.cell_value(rows + 1,column)
        C = sheet3.cell_value(rows - 1,column)   
        if (A == B or A == C): 
#            #print("UGUALE = " + str(countLINK) + " " + A)
            countLINK += 1           
            if A != B :
                # vorrei provare a scrivere in una seconda scheda dello stesso file .xlsx
                #sheet2.write(rows, i, column[rows])
#                print(A, file = fx)                 
                print(A + " = " + str(countLINK - 1), file = fx)
                # fx.write(A + " = " + str(countLINK - 1))
#                fx.write(A + " = " + str(countLINK - 1))
                countLINK = 0           
        else:     
#            print('preso', file = fx) 
#            fx.write(A + " = " + str(count_LINK) + '\n')
#            fx.write(A + " = " + str(count_LINK))
            print(A + " = " + str(count_LINK), file = fx) 
fx.close()
mic_1
Junior Member
Junior Member
 
Messaggio: 125 di 133
Iscritto il: 11/01/2011, 19:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 14/06/2019, 21:07

Moderatore: apatriarca

Ho modificato il post in modo da includere il codice tra tag CODE e quindi preservare l'indentazione che è importante per Python.


Nel seguente codice
Codice:
        i=0
        for column in column_list:
            for item in range(len(column)):
                sheet.write(item, i, column[item])

la variabile i rimane uguale a zero per tutti i cicli. Suppongo che quello che volessi fare era qualcosa come
Codice:
        for i, column in enumerate(column_list):
            for item in range(len(column)):
                sheet.write(item, i, column[item])


Un altro error è nella riga
Codice:
if(exists('generated_xls.xls' and 'log1.txt')):

Infatti 'generated_xls.xls' and 'log1.txt' è uguale a 'log1.txt' e stai quindi semplicemente verificando l'esistenza di questo ultimo file. Non mi è inoltre chiaro lo scopo di inserire uno sleep in questo caso.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5233 di 5239
Iscritto il: 08/12/2008, 21:37
Località: Londra

Re: caricamento dati da excel con python

Messaggioda mic_1 » 14/06/2019, 23:16

Anche con le modifiche il risultato non cambia:
scrive sempre sulla prima riga, cicla sempre li, quando io vorrei scrivere su tutte le righe il contenuto delle 3 celle.

Nel controllo dell'esistenza file ho inserito AND in modo tale che sia sufficiente che ne esista uno dei due per passare alla fase successiva di rimozione file.

sleep lo avevo messo per rallentare un attimo ma poi lo tolgo.

In sostanza non ho risolto.
mic_1
Junior Member
Junior Member
 
Messaggio: 126 di 133
Iscritto il: 11/01/2011, 19:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 15/06/2019, 00:50

In effetti ad una seconda lettura il codice è praticamente tutto sbagliato. Dopo la lettura di ogni riga, apri il file, scrivi la prima riga del file e poi lo chiudi. Credo che il seguente codice faccia quello che desideravi ottenere:
Codice:
wb = Workbook()
sheet = wb.add_sheet('Sheet1')

row = 0
for textfile in textfiles:
    with open(textfile, 'r+', encoding='utf-8') as f:
        for line in f:   
            items = line.split()
            for col, label in enumerate(items):
                sheet.write(row, col, label=label)
            row += 1
           
wb.save(join(mypath, 'generated_xls.xls'))
apatriarca
Moderatore
Moderatore
 
Messaggio: 5234 di 5239
Iscritto il: 08/12/2008, 21:37
Località: Londra

Re: caricamento dati da excel con python

Messaggioda mic_1 » 15/06/2019, 02:43

WOW!! Perfect

si è proprio quello che volevo... ora procedo con la seconda parte, ossia leggo la 1a scheda, elaboro e scrivo il risultato sulla 2a scheda. Domani provo a correggerlo da sola. In caso posto qui per help!

Che tu sappia con PANDAS si può velocizzare ? Grazie
mic_1
Junior Member
Junior Member
 
Messaggio: 127 di 133
Iscritto il: 11/01/2011, 19:11

Re: caricamento dati da excel con python

Messaggioda mic_1 » 16/06/2019, 01:01

Allora.... sto facendo delle prove...mi chiedevo e vi chiedo...

Quando salvo il file, vorrei poi leggerlo, aggiungere una 2a scheda e scrivere su questa.
Per leggerlo devo riaprirlo o posso usare una libreria che mi consente di importare da txt, scrivere su 1a scheda, leggere la 1a scheda, e scrivere sulla 2a???
Perchè con XLRD E XLWT è tutto un apri e salva...o scrivi e salva.
Ho provato con OPENPYXL , dopo aver usato XLWT, ma mi restituisce errore.
mic_1
Junior Member
Junior Member
 
Messaggio: 128 di 133
Iscritto il: 11/01/2011, 19:11

Re: caricamento dati da excel con python

Messaggioda apatriarca » 16/06/2019, 02:19

Non ho mai lavorato con file excel usando Python. Ma perché stai salvando il file per poi riaprirlo subito dopo quando puoi semplicemente usare i dati che hai appena letto?
apatriarca
Moderatore
Moderatore
 
Messaggio: 5235 di 5239
Iscritto il: 08/12/2008, 21:37
Località: Londra

Prossimo

Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti