[RISOLTO] Formattazione e calcolo su liste python

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

[RISOLTO] Formattazione e calcolo su liste python

Messaggio da Procopio »

Ciao a tutti,
Mi è capitato un problema strano, ho dei file html nei quali è contenuta una tabella di orari, ordinazioni, prezzi ecc.
Dovrei calcolare la durata degli ordini, cioè la differenza temporale tra orari di celle con lo stesso numero identificativo (in valore assoluto).
questo lo script in python per farlo

Codice: Seleziona tutto

import re
import urllib.request

page = urllib.request.urlopen('file:///C:/Users/Matteo/Downloads/BigBang_M15_EurUsd_2015.htm')
htm = page.read().decode("utf8")

patternd = r"class=msdate>(................)"
date = re.findall(patternd, htm)

import datetime

dtdate = []

for i in range(0 , len(date)):
    dtdate.append(datetime.datetime.strptime(date[i], '%Y.%m.%d %H:%M'))

patterno = r"([0-9]|[0-9][0-9]|[0-9][0-9][0-9])</td><td class=mspt>1.00<"
order = re.findall(patterno, htm)

norder = []
for i in range(0 , len(order)):
    norder.append(int(order[i]))


lag = []
for i in range(0 , len(norder)):
    for j in range(0 , len(norder)):
        if j > i and norder[i] == norder[j]:
            lag.append(dtdate[j]-dtdate[i])

progress=[]
for i in range(0 , int(len(norder)/2)):
    progress.append(i+1)


posizioni = []
posizioni.append(lag)
posizioni.append(progress)


durate= [list(i) for i in zip(*posizioni)]

def getkey(item):
    return item[0]
outp=sorted(durate, key=getkey)

ddu=[]
for i in range(0 , int(len(norder)/2)):
    ddu.append(outp[i][0])

ood=[]
for i in range(0 , int(len(norder)/2)):
    ood.append(outp[i][1])

esci = {'durate':ddu, 'ordini':ood}

import itertools as IT
matrix = zip(*[value if isinstance(value, list) else IT.repeat(value) for key,value in esci.items()])
print(''.join(['{:25}'.format(key) for key in esci.keys()]))
for row in matrix:
    print(''.join(['{:25}'.format(str(item)) for item in row]))
Ultima modifica di Procopio il mer 9 ago 2017, 17:33, modificato 2 volte in totale.

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: Formattazione e calcolo su liste python

Messaggio da Procopio »

per adesso ho fatto una cosa così, ma restituisce errori

Codice: Seleziona tutto

import datetime
    
list=["2015.01.05 10:47",
"2015.01.05 11:23",
"2015.01.05 20:58",
"2015.01.05 21:00",
"2015.01.05 21:15",
"2015.01.06 08:33",
"2015.01.06 09:28",
"2015.01.06 09:35",
"2015.01.09 13:36",
"2015.01.09 13:45"]

dtlist = []

for i in range(0 , len(list)-1):
    dtlist.append(datetime.datetime.strptime(list[i], "%Y.%m.%d %H:%M"))
    
        
print (dtlist)


list2 = [1,2,3,1,2,3,4,5,4,5]


lag = []
for i in range(0 , len(list2)-1):
    for j in range(i+1 , len(list2)):
        if list2[i] == list2[j]:
            lag.append(dtlist[j]-dtlist[i])
            
print (lag)
Ultima modifica di Procopio il lun 7 ago 2017, 12:23, modificato 1 volta in totale.

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6629
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: Formattazione e calcolo su liste python

Messaggio da targzeta »

Non puoi scrivere in Python e fare i cicli come in C. Pythonizzati :D

Codice: Seleziona tutto

from datetime import datetime

list=["2015.01.05 10:47",
"2015.01.05 11:23",
"2015.01.05 20:58",
"2015.01.05 21:00",
"2015.01.05 21:15",
"2015.01.06 08:33",
"2015.01.06 09:28",
"2015.01.06 09:35",
"2015.01.09 13:36",
"2015.01.09 13:45"]

dtlist = []

for date in list:
    dtlist.append(datetime.strptime(date, "%Y.%m.%d %H:%M"))

print (dtlist)

list2 = [1,2,3,1,2,3,4,5,4,5]

lag = []
for idx1, val1 in enumerate(list2):
    for idx2, val2 in enumerate(list2):
        if val1 == val2:
            lag.append(dtlist[idx2]-dtlist[idx1])

print (lag)
Emanuele
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
Procopio
Linux 3.x
Linux 3.x
Messaggi: 844
Iscritto il: ven 29 lug 2011, 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.2
Kernel: 4.4.14
Desktop: Awesome
Località: Torino

Re: Formattazione e calcolo su liste python

Messaggio da Procopio »

Sono riuscito a fare tutto, ( :mille: stackoverflow). Metto risolto ed edito il primo messaggio.
Lo script è questo

Codice: Seleziona tutto

import re
import urllib.request

page = urllib.request.urlopen('file:///C:/Users/Matteo/Downloads/BigBang_M15_EurUsd_2015.htm')
htm = page.read().decode("utf8")

patternd = r"class=msdate>(................)"
date = re.findall(patternd, htm)

import datetime

dtdate = []

for i in range(0 , len(date)):
    dtdate.append(datetime.datetime.strptime(date[i], '%Y.%m.%d %H:%M'))

patterno = r"([0-9]|[0-9][0-9]|[0-9][0-9][0-9])</td><td class=mspt>1.00<"
order = re.findall(patterno, htm)

norder = []
for i in range(0 , len(order)):
    norder.append(int(order[i]))


lag = []
for i in range(0 , len(norder)):
    for j in range(0 , len(norder)):
        if j > i and norder[i] == norder[j]:
            lag.append(dtdate[j]-dtdate[i])

progress=[]
for i in range(0 , int(len(norder)/2)):
    progress.append(i+1)


posizioni = []
posizioni.append(lag)
posizioni.append(progress)


durate= [list(i) for i in zip(*posizioni)]

def getkey(item):
    return item[0]
outp=sorted(durate, key=getkey)

ddu=[]
for i in range(0 , int(len(norder)/2)):
    ddu.append(outp[i][0])

ood=[]
for i in range(0 , int(len(norder)/2)):
    ood.append(outp[i][1])

esci = {'durate':ddu, 'ordini':ood}

import itertools as IT
matrix = zip(*[value if isinstance(value, list) else IT.repeat(value) for key,value in esci.items()])
print(''.join(['{:25}'.format(key) for key in esci.keys()]))
for row in matrix:
    print(''.join(['{:25}'.format(str(item)) for item in row]))

Rispondi