Profilo di titino2

Nome titino2
Indirizzo email n/a
Messaggi23
  • Campo contatore
    Forum >> Programmazione Python >> Database
    Ho un problema con la creazione di un campo "contatore" all'interno di una tabella già popolata; spiego meglio cosa vorrei fare:

    ho un database Sqlite (in realta Spatialite ma a livello tabellare consideriamoli molto molto simili), all 'interno di questo database ho numerose tabelle gia riempite con molti records.

    Quello che vorrei fare è creare una nuova colonna che contenga semplicemente un numeratore che parte da 1 fino n con n uguale al numero dei records contenuti all'interno della tabella. Consideriamo che il popolamento di tale colonna non puo esser effettuato tramite il semplice aggiormento con la colonna ROWID o PK_UID in quanto queste colonne possono non partire da 0 o da 1. Aggiungo anche che vorrei evitare la creazione di tabelle temporanee di "appoggio".




    Grazie a tutti.
  • Re: Load di shp in Spatialite
    Forum >> Programmazione Python >> Database
    Ciao Daniele,

    grazie per la risposta.

    Ho arginato il problema leggendo meglio la documentazione di spatialite che mi "suggerisce" di inserire una variabile di sistema "SPATIALITE_SECURITY=relaxed". Inserendo questa variabile ho risolto il mio problema.

    Vi pongo un'uteriore domanda in quanto prima di inserire la variabile di sistema ho provato con la

    os.putenv('SPATIALITE_SECURITY','relaxed') che però non mi funziona. Mi sapete dire come mai?




    Grazie di tutto
  • Load di shp in Spatialite
    Forum >> Programmazione Python >> Database
    Premetto che sono un principiante con python, detto questo vi spiego qual'è il mio problema e la cosa che vorrei realizzare.

    Ho un database Spatialite(da quello che ho capito è un database SQLITE con un "estensione spaziale"), all'interno di questo database, tramite script, vorrei caricarci una serie di file in formato shapefile ed una volta caricati questi file poterci eseguire delle operazioni tramite query SQL.

    Ho creato uno script che, se funzionasse, dovrebbe servire per fare un Load all'interno del db di questi file in formato shapefile.

    Lo script è questo:

    import sqlite3
    
    conn=sqlite3.connect(r'C:\LAVORI\provaLoad\db.sqlite')
    
    conn.enable_load_extension(True)
    
    conn.execute("SELECT load_extension('mod_spatialite');") #Carico l'estensione spaziale
    
    #carico gli shp
    
    conn.execute("""SELECT ImportSHP('C:/LAVORI/provaLoad/areenoft','areenoft','CP1252',6707);""")
    
    conn.commit()
    
    conn.close()
    
    RISULTATO:
    
    OperationalError: no such function:ImportSHP
    


    Considerate che questa "query speciale" se eseguita all'interno della gui del database funziona senza problemi. Non sono affezionato a questa procedura quindi si accettano tutti i consigli.




    Grazie di tutto in anticipo


    --- Ultima modifica di titino2 in data 2018-03-21 15:44:37 ---
  • Re: Non so da che parte farmi aiuto
    Forum >> Principianti
    Ciao a tutti...
    io da principiante ho risolto così:

    xq="            "
    [...]
            if len(r)==4:  # per processare --> punto o topolog ['', ' 714298.372', '4832489.913','577.285']
                x=r1          #Estraggo dalla stringa con le coordinate la "x"
                xo=x.strip()    #Elimino eventuali spazi vuoti iniziali
                xf=float(xo)    #Converto in float
                xfr=round(xf,2) #arrotondo la coordinata x alla 2 cifra decimale
                xs=xq[:-len(str(xfr))]+str(xfr)+"0"
    [...]
    mi dite se ho commesso qualche grave errore?

    Più vi chiedo:

    nelle stringhe che maneggio il numero degli spazi è variabile, questo mi da fastidio quindi vorrei uniformare il numero degli spazi che vi sono contenuti e lasciare solamente uno spazio tra i vari valori. Per fare questo io ho risolto in maniera molto empirica con dei replace a cascata ma mi sembra una soluzione molto migliorabile. Voi come fareste? Vi metto sotto la stringa originale, la stringa risultante e l'estrazione del mio script.

    fi=f.readlines()  #Leggo il file
    for i in range(0,l):
        fin=str(fi)
        if fin.startswith("   ") is True:    
            print fin
            rr=fin.replace("  "," ")
            print rr
            rrr=rr.replace("  "," ")
            print rrr
            rrrr=rrr.replace("  "," ")
            print rrrr
    
            r=fin.split(" ")
    Risultati:

    #print fin

    713077.454 4833258.372 449.9962

    #print rr

    713077.454 4833258.372 449.9962

    #print rrr

    713077.454 4833258.372 449.9962

    #print rrrr

    713077.454 4833258.372 449.9962

    Grazie a tutti ancora di tutto.


    --- Ultima modifica di titino2 in data 2017-10-11 14:21:52 ---
  • Re: Non so da che parte farmi aiuto
    Forum >> Principianti
    Ciao Daniele,

    concordo con te.. ma visto che sono un autodidatta e probabilmente molto propenso all'errore ho messo tutto il codice(che risulta lungo solo perche è la ripetizione di alcuni if altrimenti sarebbe banale e breve) giusto per avere spunti e suggerimenti.

    Comunque il codice a grandi linee produce un file che potrebbe essere quello da me richiesto anche se ancora ci sono degli errori di impaginazione che non so come risolvere (anche per questo ho messo tutto il codice così da darvi la possibilità di vedere dove sbaglio... magari ho sbagliato proprio l'approccio).

    Mi permetto di farvi un ulteriore domanda che magari mi aiuta a ricomporre il mio script risolvendo anche gli errori rimasti.

    Considerate che io ho delle stringhe contenenti dei valori x,y,z e altro. Questi valori devono essere inseriti all'interno di colonne, ovvero la colonna 9 contiene la x la colonna 10 la y la colonna 11 la z e la 12 altro. Le colonne x y hanno un allineamento a dx mentre la colonna z a sx. Come faccio a stabilire come devo formattare la nuova stringa risultante? Perché come vedete dal mio script io ho provato a giocarmela con gli spazi ma chiaramente come vedete nell'esempio sotto, appena un valore è più lungo o più corto si spagina tutta la serie.

    Grazie in anticipo.

    714298.370 4832489.910 0.00 0

    714302.20 4832485.610 0.00 0

    714294.656 4832494.094 577.286 0

    714294.660 4832494.090 0.00 0

    714298.370 4832489.910 0.00 0



  • Re: Non so da che parte farmi aiuto
    Forum >> Principianti
    Buonasera a tutti,
    seguendo i consigli ho fatto qualche passo in avanti ma ancora il risultato mi pare acerbo specie perche il file risultante non è ancora perfettamente identico al file di ingresso(eccezion fatta per l'arrotondamento delle coordinate). Vi allego il file di partenza ed il file prodotto dallo script e vedrete che acora non riesco a gestire bene gli a capo.
    Sotto vi metto il mio script...
    vi prego di darmi consigli e di pazientare se ho commesso qualche o molti errori.
    Grazie in anticipo per i consigli
    #Lettura del file
    f=open(r'C:\ProveTest_Campione.gca',"r")  #Apro il file
    fi=f.readlines()  #Leggo il file
    coordTR=open('C:\\Prove\\TrovaFS.txt',"w")  #Creo il nuovo file dove riscrivero il file con le coordinate tagliate
    #print "___________________Stampo il File completo___________________________________"
    ##print fi
    #print "___________________Fine Stampa File completo__________________________________"
    l=len(fi)
    for i in range(0,l):
        fin=str(fi)
        if fin.startswith("   ") is True:
    #____________Estrazione x y z con sulla base dello .split_________
            r=fin.split("  ")
            print r
            print len(r)
            if len(r)==4:  # per processare --> punto o topolog ['', ' 724345.372', '4234489.913','577.285']
    
                x=r1          #Estraggo dalla stringa con le coordinate la "x"
                xo=x.strip()    #Elimino eventuali spazi vuoti iniziali
                xf=float(xo)    #Converto in float
                xfr=round(xf,2) #arrotondo la coordinata x alla 2 cifra decimale
                print xo
                print xfr
    ##            coordTR.write("\n")
                coordTR.write("   "+str(xfr)+"  ")
                y=r2          #Estraggo dalla stringa con le coordinate la "y"
                yo=y.strip()    #Elimino eventuali spazi vuoti iniziali
                print yo
                yf=float(yo)    #Converto in float
                yfr=round(yf,2) #arrotondo la coordinata y alla 2 cifra decimale
                print yo
                print yfr
                coordTR.write(str(yfr)+"    ")
                z=r-1          #Estraggo dalla stringa con le coordinate la "z"
                zo=z.strip()    #Elimino eventuali spazi vuoti iniziali
                print zo
                zf=float(zo)    #Converto in float
                zfr=round(zf,2) #arrotondo la coordinata z alla 2 cifra decimale
                print zo
                print zfr
                coordTR.write(str(zfr))
    
            elif len(r)==5 and r3=="":  # per processare -->punto o topolog ['', ' 724345.372', '4234489.913', '', '577.285']
    
                x=r1          #Estraggo dalla stringa con le coordinate la "x"
                xo=x.strip()    #Elimino eventuali spazi vuoti iniziali
                xf=float(xo)    #Converto in float
                xfr=round(xf,2) #arrotondo la coordinata x alla 2 cifra decimale
                print xo
                print xfr
    ##            coordTR.write("\n")
                coordTR.write("   "+str(xfr)+"  ")
                y=r2          #Estraggo dalla stringa con le coordinate la "y"
                yo=y.strip()    #Elimino eventuali spazi vuoti iniziali
                print yo
                yf=float(yo)    #Converto in float
                yfr=round(yf,2) #arrotondo la coordinata y alla 2 cifra decimale
                print yo
                print yfr
                coordTR.write(str(yfr)+"    ")
                z=r-1          #Estraggo dalla stringa con le coordinate la "z"
                zo=z.strip()    #Elimino eventuali spazi vuoti iniziali
                print zo
                zf=float(zo)    #Converto in float
                zfr=round(zf,2) #arrotondo la coordinata z alla 2 cifra decimale
                print zo
                print zfr
                coordTR.write(str(zfr))
            elif len(r)==6 and r3=="":  # per processare --> linea ['', ' 724345.372', '4234489.913', '', '577.285', '0']
    
                x=r1          #Estraggo dalla stringa con le coordinate la "x"
                xo=x.strip()    #Elimino eventuali spazi vuoti iniziali
                xf=float(xo)    #Converto in float
                xfr=round(xf,2) #arrotondo la coordinata x alla 2 cifra decimale
                print xo
                print xfr
    ##            coordTR.write("\n")
                coordTR.write("   "+str(xfr)+"  ")
                y=r2          #Estraggo dalla stringa con le coordinate la "y"
                yo=y.strip()    #Elimino eventuali spazi vuoti iniziali
                print yo
                yf=float(yo)    #Converto in float
                yfr=round(yf,2) #arrotondo la coordinata y alla 2 cifra decimale
                print yo
                print yfr
                coordTR.write(str(yfr)+"    ")
                z=r-1          #Estraggo dalla stringa con le coordinate la "z"
                zo=z.strip()    #Elimino eventuali spazi vuoti iniziali
                print zo
                zf=float(zo)    #Converto in float
                zfr=round(zf,2) #arrotondo la coordinata z alla 2 cifra decimale
                print zo
                print zfr
                coordTR.write(str(zfr)+"   ")
                coordTR.write(r-1)
            elif len(r)<4:  # per processare --> testo ['', ' 724345.372', '4234489.913']
    
                x=r1          #Estraggo dalla stringa con le coordinate la "x"
                xo=x.strip()    #Elimino eventuali spazi vuoti iniziali
                xf=float(xo)    #Converto in float
                xfr=round(xf,2) #arrotondo la coordinata x alla 2 cifra decimale
                print xo
                print xfr
    ##            coordTR.write("\n")
                coordTR.write("   "+str(xfr)+"  ")
                y=r2          #Estraggo dalla stringa con le coordinate la "y"
                yo=y.strip()    #Elimino eventuali spazi vuoti iniziali
                print yo
                yf=float(yo)    #Converto in float
                yfr=round(yf,2) #arrotondo la coordinata y alla 2 cifra decimale
                print yo
                print yfr
                coordTR.write(str(yfr)+"    ")
                z=r-1          #Estraggo dalla stringa con le coordinate la "z"
                zo=z.strip()    #Elimino eventuali spazi vuoti iniziali
                print zo
                zf=float(zo)    #Converto in float
                zfr=round(zf,2) #arrotondo la coordinata z alla 2 cifra decimale
                print zo
                print zfr
                coordTR.write(str(zfr))
        else:
            if i<=1:  #per non mettere gli "\n" nell'intestazione
                print "Attributi "+fin
                coordTR.write(str(fin))
            elif i>1:
                print "Attributi "+fin
                coordTR.write("\n"+str(fin))
    coordTR.close()
    print "__________________Fine_______________________"
    f.close

  • Re: Non so da che parte farmi aiuto
    Forum >> Principianti
    Grazie in anticipo per la risposta.

    Vi prego di perdonare la non correttezza del mio programma e soprattutto la banalità, se non l'ho pubblicato prima è perché mi vergogno di quello che sono riuscito a fare.. vi assicuro che non è banale per mancanza di impegno ma solo per mancanza di capacità.

    Come premesso non so da che parte farmi... ho fatto un po di prove... ma veramente non so quale strada e quali "strumenti" utilizzare.Posso solo immaginare che la soluzione risieda nella creazione di qualche classe o qualche funzione... ma sinceramente non saprei come strutturarla.

    Ho messo ## nella parte che non ho cancellato e che volevo provare ad usare per poter capire qual'era almeno la riga che contiene le coordinate, ma dopo un po di prove mi pare di capire che questa strada non è quella giusta.

    Mi potete aiutare?





    #Lettura del file

    f=open(r'C:\Prove\Test.txt',"r")

    riga1 = f.readline()

    print riga1

    riga2 = f.readline()

    print riga2

    riga3 = f.readline()

    print riga3

    fi=f.readlines()

    print "___________________File completo___________________________________"

    print fi

    #questa parte era per provare a capire quando era la riga che conteneva le

    #coordinate visto che la riga delle coordinate inizia sempre con 3 spazi vuoti

    ##l=len(fi)

    ##print l

    ##print type(fi)

    ##for i in fi:

    ## print riga1[0:6]

    ## if riga1[0:2]==" ":

    ## print "geo"

    ## else:

    ## print "diverso"

    f.close




    Grazie ancora in anticipo
  • Non so da che parte farmi aiuto
    Forum >> Principianti
    Buongiorno a tutti,

    vi chiedo aiuto perche leggendo anche qualche guida non ho veramente idea di come posso fare.

    Io ho un file di testo contenente una serie di valori esadecimali ed una serie di coordinate con 3 cifre decimali. All'interno del file ogni riga che inizia con "topolog" "punto" "linea" "testo" è successivamente seguita da una serie di coordinate(che sono riferite rispettivamente al punto o alla lineea ecc..) e nel caso dei topolog anche da altri valori.Io volevo fare un programma che riscrive lo stesso file di testo ma con i valori delle coordinate arrotondate alla seconda cifra decimale.

    Ho fatto un po di prove e fino all apertura del file e l'inserimento del contenuto all interno di una lista o stringa ci riesco utilizzando le funzioni "readline e readlines" ma veramente non riesco ad arrivare oltre.

    Mi potete dare una mano?

    Sotto (e allegati) vi incollo il testo contenuto in un file txt che voglio elaborare e il testo rimaneggiato a mano che vorrei riuscire a produrre in automatico.




    --Testo Originale--




    Prova di troncamento

    topolog 59 505C 0 5 255 255 ffffffff ffffffff ffffffff

    953099.454 4833258.392 449.9962

    id 94562a9a

    id ad05cf55

    topolog 6 505C 0 5 255 255 ffffffff ffffffff ffffffff

    953036.809 4833296.546 49.4552

    id 5362d82c

    id 4a22524d

    id cfd329c4

    id 549e2492

    id 888d59ec

    id d6ee3849

    punto 5 932 ffffffff ffffffff ffffffff

    953380.340 4832909.096 695.993

    punto 5 932 ffffffff ffffffff ffffffff

    953925.959 4832598.424 669.652

    linea 5 505063 5 255 255 ffffffff ffffffff ffffffff

    954298.392 4832489.953 599.286 0

    954302.200 4832485.609 599.286 0

    954306.295 4832489.250 599.286 0

    954302.429 4832493.563 599.286 0

    954298.392 4832489.953 599.286 0

    testo 5 T5005 0 0.0000 6.0000 50 f9bda380 ffffffff ffffffff 0 PIERO

    953203.838 4833256.502

    testo 5 T5005 0 0.0000 6.0000 50 f9bda380 ffffffff ffffffff 0 CLEMENTE

    953228.608 4833256.502

    finefile







    --Testo finale prodotto a mano--




    Prova di troncamento

    topolog 59 505C 0 5 255 255 ffffffff ffffffff ffffffff

    953099.45 4833258.39 449.9962

    id 94562a9a

    id ad05cf55

    topolog 6 505C 0 5 255 255 ffffffff ffffffff ffffffff

    953036.81 4833296.55 49.46

    id 5362d82c

    id 4a22524d

    id cfd329c4

    id 549e2492

    id 888d59ec

    id d6ee3849

    punto 5 932 ffffffff ffffffff ffffffff

    953380.34 4832909.1 695.99

    punto 5 932 ffffffff ffffffff ffffffff

    953925.959 4832598.42 669.65

    linea 5 505063 5 255 255 ffffffff ffffffff ffffffff

    954298.392 4832489.95 599.29 0

    954302.200 4832485.61 599.29 0

    954306.295 4832489.25 599.29 0

    954302.429 4832493.56 599.29 0

    954298.392 4832489.95 599.29 0

    testo 5 T5005 0 0.0000 6.0000 50 f9bda380 ffffffff ffffffff 0 PIERO

    953203.83 4833256.50

    testo 5 T5005 0 0.0000 6.0000 50 f9bda380 ffffffff ffffffff 0 CLEMENTE

    953228.61 4833256.50

    finefile







    Grazie mille in anticipo.





    --- Ultima modifica di titino2 in data 2017-10-04 14:49:29 ---

    --- Ultima modifica di titino2 in data 2017-10-04 16:23:06 ---
  • Re: Banale: IF e PyQT
    Forum >> Principianti
    Grazie a tutti...
    quando ho caricato la mia risposta non ho visto quello che mi aveva scritto Daniele aka Palmux.

    Ora provo a seguire tutti i vostri consigli e vi faccio sapere...




    Ciao..
  • Re: Banale: IF e PyQT
    Forum >> Principianti
    Grazie per la risposta...
    si hai ragione con il tuo consiglio avrei potuto risolvere se i "gruppi" avessero tutti la stessa lunghezza ma a volte sono di lunghezza diversa. (es. A1B1, A2B2, A3, A4B4, A5, B6, B9, ecc..)

    Io ho provato con la funzione string.split ma continuo ad avere problemi... vi allego il codice che come potete vedere mi da degli errori che ancora non ho superato..

    import string
    delivery=['A1B1 20160213','A1B1 20161001','B2_20160202','B2_20161010','F3_20160203']
    dely=string.split(str(delivery),"_")
    l=len(dely)
    ##print l
    list(dely)
    print type(dely)
    d=[]
    print type(d)
    for i in range(0,l,2):
        print i
        if i==0:
            d=dely
            list(d)
            print type(d)
        else:
            print type(d)
            list(d)
            print type(d)
            d.append(dely)
            print d
    print d
    Questo era il "fanta codice" che ho provato a creare per estrarre il "nome del blocco".

    Poi sto cercando di fare quello che estratto il nome del blocco mi identifica quello con la data più recente (qui mi perdo dopo 3 sec.).




    Ciao e grazie