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 ... 37
1
Progetti e script / Re:Lista excel
« il: Oggi alle 18:29 »
Salve, vorrei sapere come è possibile creare uno script che permette che quando inserisco un hard  disk esterno ...

Nel senso che "quando inserisci" parta automaticamente il tuo script python per fare le sue cose? : Roba da sistema operatio principalmente, in linux probabilmente mi riuscirebbe di farlo ma sarebbe per me un'avventura epica ... ma credo che probabilmente Tu utilizzi windows, in tal caso è fuori dal mio orizzonte.

Nel caso, invece, il discorso sia limitato a lanciare uno script che carichi su di un foglio elettronico il contenuto di una directory (tipo "G:" o cm'è in windows), questo lo dovrebbe fare
# -*- coding: utf-8 -*-

import openpyxl
import os
import sys

class Worker:
    def __init__(self, path, sheet):
        self.source = path
        self.sh = sheet
        self.tot_files = 0
        self.added = 0
        self.row = 1
        self.perc = 0

    def _count_to_dir(self):
        tot_files = []
        for source, dirs, files in os.walk(self.source):
            tot_files += files + dirs
        self.tot_files = len(tot_files)

    def make_to_sheet(self):
        print('Valutazione albero directory :\n\n')
        self._count_to_dir()
        if not self.tot_files:
            msg = 'Nessun contenuto in %s' % self.source
            print(msg)
            return
        self.evaluate_node(self.source, 0)
        print('\n\nProcesso completato.')

    def evaluate_node(self, f_name, l):
        lev = l + 1
        text = os.path.basename(f_name)
        self.sh.cell(self.row, lev, value=text)
        self.added += 1
        self.percentage()
        self.row += 1
        if not os.path.isdir(f_name): return
        contents = os.listdir(f_name)
        sub_dirs = []
        c_files = []
        for elem in contents:
            nf_name = os.path.join(f_name, elem)
            if os.path.isdir(nf_name):
                sub_dirs.append(nf_name)
            elif os.path.isfile(nf_name):
                c_files.append(nf_name)
        if sub_dirs:
            sub_dirs.sort()
            for elem in sub_dirs:
                self.evaluate_node(elem, lev)
        if c_files:
            c_files.sort()
            for elem in c_files:
                text = os.path.basename(elem)
                self.sh.cell(self.row, lev, value=text)
                self.added += 1
                self.percentage()
                self.row += 1

    def percentage(self):
        if int(self.added * 100 / self.tot_files) > self.perc:
            self.perc = int(self.added * 100 / self.tot_files)
            if self.perc % 2 == 0:
                print('#', end = '')

if __name__ == '__main__':
    if len(sys.argv) != 2:
        msg = 'Uso : python mberta.py path_dir'
        print(msg)
        exit()
    path_dir = sys.argv[1]
    if not os.path.exists(path_dir) or not os.path.isdir(path_dir):
        msg = 'File inesistente o non è una directory'
        print(msg)
        exit()
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = 'mberta dir list'
    esclave = Worker(path_dir, ws)
    esclave.make_to_sheet()
    wb.save(filename='mberta_filava.xlsx')


[Edit] - Corretto un bug logico nella produzione della barra di avanzamento (metodo "percentage" di Worker)

2
Chi domanda non è stupido ... è un vecchio proverbio delle mie parti.

Comunque, dipende un po' dal dispositivo che utilizzi, parli di computer, quindi una "libreria" non ha significato per un computer "standard" ma non è da escludere che attrezzandosi con qualche ninnolo tecnologico non si possa rilevare la propria posizione tramite segnali satellitari, saranno però questi "ninnoli" ed il software a loro corredo a rilevare la posizione.
Possibile, in una condizione tale, che ci siano possibilità di interfacciarsi con tale oggetto per estrarne i dati di localizzazione.

3
Curiosa domanda : come farebbe a sapere, lo script, la posizione della macchina su cui viene eseguito senza avere riferimenti esterni?

Credi, forse, che google maps ricavi la posizione per triangolazione? O è un database degli IP pubblici o sono celle telefoniche + database degli identificativi di dispositivi (se non è zuppa è pan bagnato)

4
Esercizi / Re:Ricerca in file da file
« il: Dicembre 01, 2021, 13:37 »
Intanto grazie per la risposta, mi hai dato spunto per un approccio alternativo...
Mi fa piacere di esserci riuscito ... Te ne do un altro di alternativo:
>>> f_ip = 'listaIP.txt'
>>> f_log = 'logFile.txt'
>>> with open(f_ip) as f1, open(f_log) as f2:
l_ip = f1.read().splitlines()
l_log = f2.read().splitlines()


>>> result = [(x,[y for y in l_log if x in y]) for x in l_ip]
>>> for ip in [x for x in result if len(x[1]) > 0]:
print(ip[0] + ' ---> ' + ip[1][0])
if len(ip[1]) > 1:
for i in range(1, len(ip[1])):
print(' ' * (len(ip[0]) + 6) + ip[1][i])


192.168.0.11 ---> 2021-10-25 11:10:05 Broken connection to 192.168.0.11
                  2021-10-25 11:11:15 192.168.0.11 access to anagdb
                  2021-10-25 12:35:58 192.168.0.11 connection anagdb closed
                  2021-10-25 13:01:55 192.168.0.11 connection anagdb closed
192.168.0.13 ---> 2021-10-25 11:10:09 192.168.0.13 access to anagdb
192.168.0.21 ---> 2021-10-25 12:49:23 192.168.0.21 access to anagdb
>>>

... Python permette approcci molto vari, a studiarselo un po' ;)

5
Esercizi / Re:Ricerca in file da file
« il: Dicembre 01, 2021, 09:06 »
Mancano i dati su cui ragionare, poco male, supponiamo sia listaIP.txt così costituito:
192.168.0.11
192.168.0.12
192.168.0.13
192.168.0.21
192.168.0.25
192.168.0.33

e quel che segue il contenuto di logFile.txt
2021-10-25 11:10:05 Broken connection to 192.168.0.11
2021-10-25 11:10:09 192.168.0.13 access to anagdb
2021-10-25 11:11:15 192.168.0.11 access to anagdb
2021-10-25 11:11:17 192.168.0.27 login fail - access denied
2021-10-25 12:35:58 192.168.0.11 connection anagdb closed
2021-10-25 12:49:23 192.168.0.21 access to anagdb
2021-10-25 13:01:55 192.168.0.11 connection anagdb closed

e vediamo cosa succede con il metodo che utilizzi :
>>> f_ip = 'listaIP.txt'
>>> f_log = 'logFile.txt'
>>> with open(f_ip, 'r') as reader, open(f_log, 'r') as search:
for line in reader:
for line1 in search:
if line in line1:
print(line, '--->', line1)
search.seek(0)


192.168.0.11
 ---> 2021-10-25 11:10:05 Broken connection to 192.168.0.11

0
0
0
0
0
0

vengono stampati solo il primo elemento, la prima riga ed un po' di zeri, ed il tutto NON appare come Tu vorresti ... perché? Un indizio lo fornice la stampa del primo IP e della riga di log: entrambe sono andate a capo anche se nella istruzione di stampa non vi è alcuna istruzione in tal senso, quindi, è contenuta nelle stringhe stesse, fa parte della riga di lettura nei files e questo vuol dire che se l'indirizzo IP non è a fine riga non può essere trovato, perché contiene un ritorno a capo ("\n" nel mio sistema linux, forse diverso nel Tuo windows) che deve essere eliminato.
Gli "zeri" sono dati dall'operazione seek del search, una variante della tua implementazione che tiene conto di tali fattori:
>>> with open(f_ip, 'r') as reader, open(f_log, 'r') as search:
for line in reader:
l = line.replace('\n', '')
for line1 in search:
if l in line1:
print(l, '--->', line1, end='')
ch = search.seek(0)


192.168.0.11 ---> 2021-10-25 11:10:05 Broken connection to 192.168.0.11
192.168.0.11 ---> 2021-10-25 11:11:15 192.168.0.11 access to anagdb
192.168.0.11 ---> 2021-10-25 12:35:58 192.168.0.11 connection anagdb closed
192.168.0.11 ---> 2021-10-25 13:01:55 192.168.0.11 connection anagdb closed
192.168.0.13 ---> 2021-10-25 11:10:09 192.168.0.13 access to anagdb
192.168.0.21 ---> 2021-10-25 12:49:23 192.168.0.21 access to anagdb
>>>


Suggerimento: dopo esserti studiato le liste, rivedi questo processo con l'utilizzo di liste e del metodo splitlines() delle stringhe, cerca nella docs.

Ciao

6
Salve

Sto implementando, per mio uso, un player/organizer audio/video con capacità di ricerca ricorsiva di tal genere di files multimediali.
Per il riconoscimento, al momento, ho implementato i processi tramite "magic" che però, in fase di test si sta rivelando insoddisfacente, infatti a volte invece di riconoscere un file audio per quello che è risponde con un generico
>>> for f in f_audio:
...     print(f, ' - ', magic.from_file(f, mime=True))
...
CD1-01.mp3  -  application/octet-stream
CD1-02.mp3  -  application/octet-stream
CD1-03.mp3  -  application/octet-stream
CD1-04.mp3  -  application/octet-stream

mentre invece sono effettivamente files audio
(vlc_v) NzP:~$ file ./*
./CD1-01.mp3: Audio file with ID3 version 2.3.0
./CD1-02.mp3: Audio file with ID3 version 2.3.0
./CD1-03.mp3: Audio file with ID3 version 2.3.0
./CD1-04.mp3: Audio file with ID3 version 2.3.0

Ovviamente, la faccenda mi complica la vita.

Conoscete qualche libreria più adeguata all'obiettivo (riconoscimento tipi mime) o debbo, ohimè, rassegnarmi a valutare le estensioni?

N.B. - lo so che chi cerca trova ma tra trovare, tradurre e provare rischio di invecchiare su una ca...ta.
..

[/pythoncode]

7
ALT!

Qua ci troviamo di fronte ad un problema "serio" : manca l'obiettivo da raggiungersi.

Non può sussistere l'ultimo grafico da Te esposto utilizzando "get_p_min_vertex", dato che tale funzione individua quella che abbiamo indicato come "retta di minima pendenza", che andrebbe a giacere sull'ultimo punto del nuovo grafico.

Devi, per prima cosa, stabilire in maniera rigorosa e chiara cosa devi ottenere e con quali condizioni e dati, soltanto una volta stabilito questo può iniziarsi a ragionare, la approssimazione per tentativi ed errore non è ammissibile in programmazione, la logica procedurale (algoritmo se vuoi) deve essere univoca e rigorosamente determinata, senza alcuna ambiguità.

[Edit] rileggendo e riflettendo mi è venuto il dubbio che Tu non riesca a tracciare detta "retta di minima pendenza" nel tuo grafico ... se è questo il problema, allora, ovviamente, il discorso passa per l'equazione della retta passante per due punti trovati da applicarsi all'ampiezza del grafico in questione, gironzolando in rete si trovano soluzioni, comunque, magari un po' rozza ma ne ho adattata una che restituisce una funzione che per ogni ordinata del grafico calcola l'ascissa corrispondente sulla retta, prova questo Tuo codice integrato e vedi se è quello che Ti serve:
import csv
import pandas as pd
from matplotlib import pyplot as plt

with open('pyanam.csv', 'r') as f:
data = list(csv.DictReader(f, delimiter=','))

for r in data:
print(r)

def get_p_min_vertex(d):
    data = d[::-1]
    elements = []
    m_value = str(max([int(x['fee']) for x in data]))
    for i in range(len(data)):
        if data[i]['fee'] == m_value:
            p = data[i]
            elements.append(p)
            break
    sd = data[i + 1:]
    rapp = [(int(p['fee']) - int(x['fee'])) / (int(x['time']) - int(p['time'])) for x in sd]
    i_r = rapp.index(min(rapp))
    s = sd[i_r]
    elements.append(s)
    return elements

p, s = get_p_min_vertex(data)
print('Max ',p)
print('Min',s)

def crea_retta(x1,y1,x2,y2):
    if x1==x2 and y1==y2:
        raise ValueError("Infinite rette")
    elif x1==x2:
        raise ValueError("Equazione nella forma x=q")
    else:
        m=float(y2-y1)/(x2-x1)
        q=y1-(m*x1)
    def retta(x):
        return m*x+q
    return retta

############################

csv = pd.read_csv('pyanam.csv')
data = csv[['fee', 'time']]
print(data)
x = data['time']
y = data['fee']
plt.plot(x,y,marker='o',color='blue', label = 'line 1')

try:
    r = crea_retta(int(p['time']), int(p['fee']),
                   int(s['time']), int(s['fee']))
except ValueError as e:
    print(format(e))
    r = None
x_min = min(data['time'])
x_max = max(data['time'])

plt.plot([n for n in range(x_min, x_max)], [r(n) for n in range(x_min, x_max)],
         marker='o',linestyle='-.',color='red', label = 'line 2')
plt.xlabel('TIME')
plt.ylabel('RSI VALUE')
plt.title('Grafico RSI')

plt.show()

8
wxPython / Re:PaintDC
« il: Novembre 25, 2021, 08:29 »
Spunti potresti trovarli nella demo di Phoenix che presenta anche esempi per il rendering di immagini e moltissimo altro.

Per il "perché non funziona", dipenderà certo da ciò che fai, il punto è che per rispondere bisognerebbe saperlo, prova ad inserire un esempio minimale che riproduce il Tuo problema che si vede un po.

9
Multimedia / Re:Confrontare immagini
« il: Novembre 25, 2021, 08:13 »
... incredibile!!!

Sinceramente non mi son mai posto tale ordini di problemi ma, cercando in rete si trova questo, quindi c'è chi ci pensa, potrebbe essere un buon punto di partenza.

Per altro, una libreria per l'analisi di immagini di cui ho sentito è openCV.

Sono problematiche al di la della mia portata, comunque segnalo.

Ciao

10
Mobile / Re:Come assegnare una funzione ad un bottone di kivymd?
« il: Novembre 22, 2021, 06:27 »
Non conosco minimamente Kivy, non mi interessa, ma una GUI basa il suo funzionamento sugli eventi e nella docs, proprio sull'argomento Event dispatcher vi sono esempi molto chiari su come effettuare il binding di un bottone ... ovviamente, sono centrati prevalentemente sulle classi.

11
Tkinter / Re:Immagini sovrapposte
« il: Novembre 17, 2021, 18:38 »
Non ci ho mai provato ma credo si possa fare, non è una cosa "immediata" però e molto dipende dalle finalità che hai. Ritengo che in tkinter il widget più amichevole in tal senso sia il canvas, un contenitore predisposto ai metodi grafici, possono inserirsi dei file-immagini o crearsi propri disegni, leggi bene la docs e cerca esempi in rete, ve ne sono.

Ciao

12
Ciao

Come il Kivy del Tuo precedente post, non conosco questa interessante libreria "moviepy" ma mi ha incuriosito e sono andato a vederla, non ho soluzioni da proporTi ma un indizio forse può essere utile, leggendo la docs su "audio.write_audiofile" vedo
Citazione
write_audiofile(self, filename, fps=None, nbytes=2, buffersize=2000, codec=None, bitrate=None, ffmpeg_params=None, write_logfile=False, verbose=True, logger='bar')
vedo quel "logger='bar'" che di per se non dice molto, ma andando nel sorgente del modulo, alla documentazione del metodo si legge
Citazione
        logger
          Either 'bar' or None or any Proglog logger
... che è un "qualcosa" che viene passato direttamente a ffmpeg ... non mi è chiaro "cosa" avvenga, non so cosa si a un "Prolog logger" ho fatto una ricerca e trovato questo, cioè un qualcosa tutto da studiare e da capire per me ma che potrebbe dare un "LA" (o magari fuorviare anche) verso la soluzione del Tuo quesito.

Ho pensato di segnalartelo nel caso possa esserTi utile.

13
Tkinter / Re:bottone con immagini
« il: Novembre 14, 2021, 09:42 »
Guarda, io non uso windows da più di vent'anni, se sei certo che il percorso esiste è possibile che sia una qualche particolarità di quel sistema operativo, una breve scorsa sui motori di ricerca è praticamente d'obbligo in questi casi, su stackowerflow vi sono indicate diversi possibili metodi, provali.

14
Guardando la figura credo, finalmente, di aver compreso il Tuo problema, che sarebbe : trovare la retta passante per il punto che presenta la minima pendenza rispetto al punto più alto

... Mi hai fatto venire un vago ricordo di tempi remotissimi.
Posto sia il valore "time" rappresentante l'asse "x" e "fee" le ascisse di una rappresentazione cartesiana, se osservi la figura che Tu stesso hai lincato vedrai che su tale retta giace l'ipotenusa del triangolo rettangolo formato dal Δx  e dal Δy del punto rispetto al punto più alto.
Pertanto dovremmo applicare i teoremi dei triangoli rettangoli e trovare il triangolo che presenta l'angolo minore rispetto al punto più alto che recita, se ricordo bene : "un cateto è uguale all'altro cateto per il seno dell'angolo opposto o per il coseno dell'angolo adiacente"
Ciò che serve a noi è trovare il minimo valore per il seno dell'angolo opposto a  Δy, ossia alla differenza delle ascisse (fee), quindi, limitando la progressione ai soli valori crescenti di ordinata dovremo, quindi, trovare l'angolo più piccolo il cui seno è pari a "Δy/Δx " ... un discorso piuttosto semplice, applichiamolo sugli ultimi dati da Te postati, non lo ho testato facendo il grafico ma così dovrebbe funzionare :
Python 3.8.10 (default, Sep 28 2021, 16:10:42) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license()" for more information.
>>> import csv
>>> with open('pyanam.csv', 'r') as f:
data = list(csv.DictReader(f, delimiter=','))


>>> for r in data:
print(r)


{'fee': '500', 'time': '100'}
{'fee': '724', 'time': '95'}
{'fee': '127', 'time': '93'}
{'fee': '700', 'time': '90'}
{'fee': '477', 'time': '87'}
{'fee': '999', 'time': '83'}
{'fee': '860', 'time': '80'}
{'fee': '900', 'time': '75'}
{'fee': '800', 'time': '70'}
{'fee': '1000', 'time': '60'}
{'fee': '1200', 'time': '50'}
{'fee': '1100', 'time': '40'}
{'fee': '1050', 'time': '30'}
>>> def get_p_min_vertex(d):
data = d[::-1]
elements = []
m_value = str(max([int(x['fee']) for x in data]))
for i in range(len(data)):
if data[i]['fee'] == m_value:
p = data[i]
elements.append(p)
break
sd = data[i+1:]
rapp = [(int(p['fee'])-int(x['fee']))/(int(x['time'])-int(p['time'])) for x in sd]
i_r = rapp.index(min(rapp))
s = sd[i_r]
elements.append(s)
return elements

>>> p, s = get_p_min_vertex(data)
>>> p
{'fee': '1200', 'time': '50'}
>>> s
{'fee': '999', 'time': '83'}
>>>

... ovviamente, se Tu volessi anche la retta inversa (time precedente il punto più alto) la logica sarebbe analoga, con adattamento del sub-set di valori da esaminare

15
Tkinter / Re:bottone con immagini
« il: Novembre 12, 2021, 19:18 »
>>> print('C:\jacopo biondi\Desktop\video_in_audio.png')
C:\jacopo biondi\Desktop ideo_in_audio.png
>>>


La sequenza "\v" indica una tabulazione verticale, fau una ricerca con "python escape character list", ve ne sono parecchi che danno problemi, se devi scrivere una stringa con "\" fai precedere con una r (raw) la stringa
>>> print(r'C:\jacopo biondi\Desktop\video_in_audio.png')
C:\jacopo biondi\Desktop\video_in_audio.png
>>>

Pagine: [1] 2 3 ... 37