titino2
Profilo di
Nome | titino2 |
---|---|
Indirizzo email | n/a |
Messaggi | 23 |
-
- 2018-06-05 10:43:25
- 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.
-
- 2018-04-06 10:34:02
- 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
-
- 2018-03-21 15:44:11
- 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 ---
-
- 2017-10-11 14:21:08
- 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 ---
-
- 2017-10-06 09:11:13
- 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
-
- 2017-10-05 14:14:20
- 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
-
- 2017-10-04 18:03:58
- 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
-
- 2017-10-04 14:49:08
- 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 ---
-
- 2016-11-29 10:12:18
- 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..
-
- 2016-11-29 08:57:58
- 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