Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - nuzzopippo

Pagine: [1] 2 3 ... 14
1
Base / Re:carattere $
« il: Oggi alle 08:00 »
Il simbolo "$" di norma viene utilizzato quale prompt dei comandi nei sistemi unix-like, tipo linux, p.e., anche se non necessariamente dato che può essere "personalizzato, tipo il mio :
NzP:~$ python3 --version
Python 3.6.9
NzP:~$


equivale al "c:\>" della shell ms-dos (prompt dei comandi windows), non tenerlo in considerazione, è solo il punto di inserimento di un comando in una shell bash.

2
Benvenuto e regolamento / Re:Presentazioni
« il: Oggi alle 07:53 »
Ciao @eggpap, ben venuto.

In quanto a "vecchio debilitato", diamoci la mano, anch'io son vecchietto e cerco di studiare python, impareremo insieme, magari :D

3
Prova a guardare qui se Ti è utile

4
Ciao @Fabio, ben venuto.

Lodevole iniziativa la Tua, personalmente apprezzo chi condivide la propria conoscenza.

Ci leggiamo, ciao :)

5
... vorrei poterla stampare in una vista 3d; nel mio caso la funzione genera...

Casistica a me non familiare ma mi son ricordato di aver letto di questa libreria che contiene anche un toolkit per il 3D, vedi un po' se Ti è utile.

Ciao :)

6
Progetti e script / Re:Unione CSV
« il: Marzo 25, 2020, 19:54 »
...
Se hai problemi puoi anche scrivermi in privato

No, non ho problemi ho chiesto solo per capire se vi era una domanda, in ogni caso questo è un forum, si scrive qui per condividere ed acquisire le conoscenze/esperienze messe in comune.

Fermo restando che suggerisco di far tesoro delle indicazioni di @caronte

Guardando la Tua presentazione vedo che hai iniziato da poco, non credo di essere molto più avanti di Te ma guardando il Tuo codice ho notato alcune cose, mi permetto alcuni suggerimenti, sperando di non toppare.

1° - vedo che hai inserito manualmente il path (relativo) alla directory contenente i files, potresti inserirlo quale parametro al Tuo script e leggerlo da argv di sys, per poi utilizzarlo, in un modo del genere :
import glob
import sys
import os

path = sys.argv[1]

all_filenames = [i for i in glob.glob(os.path.join(path, "*.csv"))]
#inserisco il path per arrivare alla cartella che contiene i file da unire

dest_file = os.path.join(path, "Unione_files.csv")


Poi, lo script, ovviamente, Ti da output errato nella lettura delle righe dati del secondo csv, il problema che Vuoi risolvere (se ho capito bene), ferma restando il migliore, seppur generico, approccio a Te soppoposto nel post su, ragionando a livello basico, NON puoi limitarti a copiarti le righe ma devi effettuare un minimo di valutazione dei dati.
... i dati, d'altronde, li splitti tramite la virgola ma li hai rappresentati con '|' quale separatore.

Dal Tuo script vedo che, potenzialmente, potresti voler cercare più "colonne" (lo 'stop') ... mi son divertito a buttare giù una mia versione per mero e sbrigativo esempio "terra-terra" utilizzando i comandi di base ed un minimo di list-comprehensins, che Ti ho visto usare con glob, posta una struttura directory con tre file csv, 'ci fatti :
NzP:~$ tree
.
├── data
│   ├── file1.csv
│   ├── file2.csv
│   └── file3.csv
├── nuzzo.py
├── per_post
└── sendo.py

1 directory, 6 files
NzP:~$ cat data/file1.csv
Timestamp|Stanza_01*Inclinazione_01|Stanza_02*Inclinazione_01
1|0.2|0.432
2|0.4|0.548
NzP:~$ cat data/file2.csv
Timestamp|Stanza_01*Inclinazione_01|Stanza_03*Inclinazione_02
3|0.3|0.543
4|0.6|0.972
NzP:~$ cat data/file3.csv
Timestamp|Stanza_01*Inclinazione_02|Stanza_03*Inclinazione_01
5|0.3|0.243
6|0.6|0.772
NzP:~$

Ignorando completamente l'efficienza, ho fatto uno script che si limita a stampare le colonne corrispondenti ad una ricerca ed i dati correlati
NzP:~$ python3 nuzzo.py data
Colonne da visualizzare : Inclinazione_01
Colonne da visualizzare : stop
Stanza_01*Inclinazione_01|Stanza_02*Inclinazione_01|Stanza_03*Inclinazione_01
0.2|0.432|
0.4|0.548|
0.3||
0.6||
||0.243
||0.772
NzP:~$


Lo script è questo, vedi se può esserTi utile
# -*- coding: utf-8 -*-

import glob
import sys
import os

path = sys.argv[1]

def append_data(selectors, collector, identifier, data):
    '''
    Aggiunge al dizionario di lettura i campi interessanti contenuti in
    un file csv
    '''
    headers = data[0].split('|')
    match_indexes = []
    for i in range(len(headers)):
        for sel in selectors:
            if sel in headers[i]:
                match_indexes.append(i)
    # controlla se è stato trovato qualcosa
    if not match_indexes:
        return
    founds = {}
    # crea una chiave con le intestazioni di colonna trovate
    founds['headers'] = [headers[x] for x in match_indexes]
    # crea una lista dei dati interessanti la ricerca
    match_data = []
    for data_row in data[1:]:
        match_row = [data_row.split('|')[x] for x in match_indexes]
        match_data.append(match_row)
    # crea una chiave per i dati corrispondenti
    founds['data'] = match_data
    # appende il dizionario al collector
    collector[identifier] = founds

def define_new_data(collector):
    '''
    Visualizza o registra il risultato finale
    '''
    # prepara un elenco ordinato delle intestazioni trovate
    indexed_headers = []
    for key in sorted(collector.keys()):
        for elem in sorted(collector[key]['headers']):
            if not elem in indexed_headers:
                indexed_headers.append(elem)
    indexed_headers = sorted(indexed_headers)
    # ora cicla definendo le righe dati in modo che corrispondano
    # all'elenco ordinato delle intestazioni
    data = []
    for key in sorted(collector.keys()):
        # definisce una matrice degli indici di appartenenza e destinazione
        index_matrix = []
        for i in range(len(collector[key]['headers'])):
            h = collector[key]['headers'][i]
            for j in range(len(indexed_headers)):
                if h == indexed_headers[j]:
                    index_matrix.append(j)
                    break
        # definisce la matrice dati da visualizzare
        for data_row in collector[key]['data']:
            base_row = [''] * len(indexed_headers)
            for i in range(len(data_row)):
                base_row[index_matrix[i]] = data_row[i]
            data.append(base_row)
    text = '|'.join(indexed_headers)
    for elem in data:
        text += '\n' + '|'.join(elem)
    return text

if __name__ == '__main__':
    if len(sys.argv) != 2:
        print('Utilizzo : python nuzzo.py "path_da_aprire"')
        exit(0)
    path = sys.argv[1]
    try:
        filenames = glob.glob(os.path.join(path, "*.csv"))
    except OSError as e:
        print('Errore in lettura directory', e)
        exit(1)
    if not filenames:
        print('Nessun file *.csv trovato')
        exit(0)

    search_columns = []
    selected = ''
    while selected != 'stop':
        selected = input('Colonne da visualizzare : ')
        if selected and selected != 'stop':
            search_columns.append(selected)
    if not search_columns:
        print('Nessuna ricerca impostata')
        exit(0)
    collector = {}
    for file in filenames:
        data = None
        try:
            with open(file, 'r') as f:
                data = f.read().splitlines()
        except IOError as e:
            print('Errore lettura', file, e)
        if data:
            append_data(search_columns, collector, file, data)
    print(define_new_data(collector))

Può cercare su più "elementi" ma, ovviamente, una piccola differenza comporta una aggiunta nella riga di intestazione.

Ciao

7
Progetti e script / Re:Unione CSV
« il: Marzo 25, 2020, 10:13 »
a niente infatti in quello originale l'avevo commentato, mi sono sbagliato

Salve @Sendo, ben venuto, dato che non utilizzi pandas posso osare ad intervenire :)

Non ho compreso se il Tuo post è motivato da un problema o altro, se si, quale è il problema?, come sono strutturati i csv?, un esempio per ragionarci su è disponibile?

Per altro, nella libreria base dovrebbe essere disponibile il modulo csv
Python 3.6.9 (default, Nov  7 2019, 10:44:02) 
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> import csv
>>> help('csv')
Help on module csv:

NAME
    csv - CSV parsing and writing.

MODULE REFERENCE
    https://docs.python.org/3.6/library/csv
    ...

magari potrebbe esserTi utile.

8
Benvenuto e regolamento / Re:Presentazione emanuelb
« il: Marzo 20, 2020, 10:41 »
Ciao @emanueleb, ben venuto  :)

9
Python-it.org cafè / Re:ORM : quando sono utili?
« il: Marzo 20, 2020, 10:39 »
Grazie del Tuo parere @Ric, ne tengo gran conto (nessun altro ne ha? Non siate timidi ;) ), tant'è che mi son messo a tradurmi il tutorial iniziale, per ora, giusto per vedere un po'.

Anche se, devo confessarlo, gli ORM sono un argomento che mi lascia particolarmente perplesso, principalmente considendo che :
Mah per prima cosa un orm non serve a "poter cambiare database senza cambiare il codice".

... comunque, roba nuova (per me), qualche idea nuova magari ne viene :)

10
Python-it.org cafè / ORM : quando sono utili?
« il: Marzo 19, 2020, 08:14 »
Ciao

Dato che sto avendo un po' di tempo libero sto anche cercando di curiosare in giro e "vedere un po'" di qualcosa che non conosco per eventualmente integrarlo nelle mie prove.

Ieri sera ho iniziato a curiosare, da qui, in merito ad sqlalchemy ... roba complessa, mi sembra di capire, una astrazione che si astrae dalle specifiche dei singoli dialetti SQL dei motori di database supportati ma che richiede uno studio, tanto della libreria quanto della pianificazione riveniente dal suo uso, per molti versi anche più intenso di quello necessario ad un utilizzo diretto dello SQL, la cui conoscenza (unitamente al generico funzionamento dei db) comunque è presupposto necessario.

Certamente, un mezzo utile se si devono affrontare basi dati eterogenee ma mi viene il dubbio se e quanto possano essere utili a livello amatoriale ... mi spiego : un dilettante, seppur appassionato, avrà normalmente quale target piccoli applicativi, al più utilizzerà uno o due distinti sistemi di database (sqllite/access probabilmente) e sempre gli stessi, in tale condizioni (le mie, p.e.) vale la pena di misurarsi con dette astrazioni e sovrastrutture? E se si, perché?

Cosa ne pensate Voi, sulla questione?

Preciso che NON sto chiedendo supporto in merito, tant'è che ho postato al bar, solo di conoscere pensiero e motivazioni di chi voglia esporle, avanzato o meno che sia.

Ciao :)

11
La mia risposta a questa domanda:...

Letto tutto : veramente bello!

... a volte mi fa fischiare le orecchie ma devo proprio fare i complimenti per come è affrontato l'argomento. Notevole è l'identificazione del processo "evolutivo" avuto nell'approccio al tema "programmazione", ottimi, per quanto visto, i numerosi riferimenti a documenti storico-informativi.

Come detto : mi ha fatto fischiare le orecchie ma mi è piaciuto assai, ed in particolar modo la conclusione :
Citazione
Ma non è detto che capire non possa essere divertente, molto più di imparare e molto più di usare.

12
Base / Re:Import relativi
« il: Marzo 17, 2020, 13:19 »
Ringrazio, @Ric, leggerò e, magari, chiederò se sarà necessario :)

13
Base / Re:Import relativi
« il: Marzo 17, 2020, 12:31 »
Ciao @Tommy, giusto ieri mi son rimesso, dopo un periodo di "altro", a riprendere una ipotesi di applicativo di studio ed ho provato a strutturalo come package, incontrando la difficoltà in essere, ossia che quando un modulo ha assegnato il "__main__" quale "__name__" non viene valorizzata la proprietà "__package__", quindi gli import relativi falliscono.

Mi son sbattuto parecchio per cercare di comprendere il fatto e come ovviarlo ma è certamente entrata in gioco la mia ignoranza dell'inglese e non ne son venuto a capo dalla docs, ho pertanto optato per un "metodo" artigianalmente intuitivo e definito un modulo di avvio "esterno" al package (temo sia uno sporco trucco da ex "programmatore" VB ma funziona ;) )
prosta una struttura 'si fatta

NzP:~$ tree
.
├── anagapp
│   ├── app
│   │   ├── data_models
│   │   │   ├── anagrafiche.sql
│   │   │   └── __init__.py
│   │   ├── guiviews
│   │   │   ├── gui_anag.py
│   │   │   ├── __init__.py
│   │   │   ├── my_tk_object.py
│   │   │   ├── risorse.py
│   │   │   ├── tbl_orig.py
│   │   │   └── tktable.py
│   │   ├── __init__.py
│   │   ├── interfaces
│   │   │   ├── __init__.py
│   │   │   └── observers.py
│   │   │
│   │   └──  main.py
│   └── run.py

il "package" ricade nella directory "app" ed il lancio avviene da "run.py" che si limita al solo import e lancio di "main.py"
#-*- coding: utf-8 -*-

from app import main

main.start()


Ovviamente, dato il problema, il "main.py" è stato adattato alla problematica sopra accennata.
#-*- coding: utf-8 -*-

from app.guiviews.gui_anag import GUIAnag

#if __name__ == '__main__':
    # da definire processi di inizializzazione
def _init():
    pass

def start():
    win = GUIAnag()
    win.mainloop()


Come detto, non credo sia una soluzione "canonica" ma funziona, ovvio che sto cercando qualcosa di più indicato, se trovo batto un colpo

Ciao :)

[Edit] P.S. : nelle mie ricerche, ho trovato vari "metodi" relativi alla problematica, metodi che andavano dall'utilizzo "sys.path" alla ridefinizione del "PYTHONPATH" all'avvio del programma da linea di comando con opzioni varie, spesso non comprese e tutte trovate insoddisfacenti per le mie mire di "semplice utilizzo"

14
Base / Re:Errore utilizzo di openpyxl con file .xlsm
« il: Marzo 07, 2020, 07:54 »
Se c'è una cosa che odio è parlare di "cose" senza "guardarle".. Pur non interessandomi il discorso "Microsoft only" ho voluto fare una prova.

Non avendo files *xlsm ho scaricato gli esempi di questo libro, installato la libreria (3.0.3) in un venv e fatto una prova: credo che @RicPol l'abbia centrata subito
Citazione
Poi se c'è ancora qualcosa che non va... boh, direi che il problema è nel suo file excel...

perché ho aperto il file '1.1 Sample.xlsm' degli esempi scaricati senza nessun accorgimento, vedi sessione giù
(pyxl_venv) NzP:~$ python
Python 3.6.9 (default, Nov  7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from openpyxl import load_workbook
>>> file_ex = '1.1 Sample.xlsm'
>>> wb = load_workbook(filename=file_ex)
>>> sheet_ranges = wb['range_names']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/nuzzopippo/py_venvs/pyxl/pyxl_venv/lib/python3.6/site-packages/openpyxl/workbook/workbook.py", line 273, in __getitem__
    raise KeyError("Worksheet {0} does not exist.".format(key))
KeyError: 'Worksheet range_names does not exist.'
>>>...
>>> sheet_ranges = wb['BranchList']
>>> print(repr(sheet_ranges))
<Worksheet "BranchList">
>>> for item in sheet_ranges:
...     print(item)
...
(<Cell 'BranchList'.A1>, <Cell 'BranchList'.B1>, <Cell 'BranchList'.C1>, <Cell 'BranchList'.D1>, <Cell 'BranchList'.E1>, <Cell 'BranchList'.F1>, <Cell 'BranchList'.G1>, <Cell 'BranchList'.H1>, <Cell 'BranchList'.I1>, <Cell 'BranchList'.J1>, <Cell 'BranchList'.K1>, <Cell 'BranchList'.L1>, <Cell 'BranchList'.M1>)...e dozilioni di altra roba


Suggerirei allo OP  dei test con gli esempi in questione e la verifica del file da trattare.

Ciao

[Edit] Dubbio sopravvenuto :

I traceback postati quando sono intervenuti? Alla apertura del file o durante la manipolazione/lettura? Ho visto che la libreria è un po' schizzinosa sui "nomi" non presenti.
... Domanda scema/inutile : dormivo ancora ed ero più interessato alla libreria, il tack lo dice chiaro

15
Base / Re:Errore utilizzo di openpyxl con file .xlsm
« il: Marzo 06, 2020, 20:56 »
...
come sempre in questi casi, guardare lo stacktrace porta lontano... Ora, a dare un'occhiata molto superficiale a quello stacktrace, se noti, ...

Se arrivare al sorgente dei moduli è "molto superficiale" : mammamia!

In effetti, a quella riga nel sorgente non c'è la chiamata e load_worbook è definita alla linea 285 e NON presenta chiamate "_load_workbook" ma istanzia un oggetto della stessa classe cui appartiene

 ... certamente, non ci avrei mai pensato ad una simile "eventualità", grazie di aver mostrato il ragionamento di valutazione.

Pagine: [1] 2 3 ... 14