Passa al tema normale
Discussioni su argomenti di Informatica

Regole del forum

Consulta il nostro regolamento e la guida per scrivere le formule
Rispondi al messaggio

caricamento dati da excel con python

13/06/2019, 09: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

Re: caricamento dati da excel con python

13/06/2019, 11:13

Ho provato anche a riordinare il file .txt su excel ma le righe vendono sovrapposte in fase di scrittura sempre sulla prima riga.

Re: caricamento dati da excel con python

13/06/2019, 22: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.

Re: caricamento dati da excel con python

14/06/2019, 11: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()

Re: caricamento dati da excel con python

14/06/2019, 20: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.

Re: caricamento dati da excel con python

14/06/2019, 22: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.

Re: caricamento dati da excel con python

14/06/2019, 23: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'))

Re: caricamento dati da excel con python

15/06/2019, 01: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

Re: caricamento dati da excel con python

16/06/2019, 00: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.

Re: caricamento dati da excel con python

16/06/2019, 01: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?
Rispondi al messaggio


Skuola.net News è una testata giornalistica iscritta al Registro degli Operatori della Comunicazione.
Registrazione: n° 20792 del 23/12/2010.
©2000— Skuola Network s.r.l. Tutti i diritti riservati. — P.I. 10404470014.