[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.
Avatar utente
Procopio
Linux 2.6
Linux 2.6
Messaggi: 798
Iscritto il: ven lug 29, 2011 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.1
Kernel: 4.5.2
Desktop: Awesome3
Località: Torino

[RISOLTO] Formattazione e calcolo su liste python

Messaggioda Procopio » ven ago 04, 2017 16:21

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 ago 09, 2017 17:33, modificato 2 volte in totale.

Avatar utente
Procopio
Linux 2.6
Linux 2.6
Messaggi: 798
Iscritto il: ven lug 29, 2011 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.1
Kernel: 4.5.2
Desktop: Awesome3
Località: Torino

Re: Formattazione e calcolo su liste python

Messaggioda Procopio » dom ago 06, 2017 16:03

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 ago 07, 2017 12:23, modificato 1 volta in totale.

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

Re: Formattazione e calcolo su liste python

Messaggioda targzeta » mar ago 08, 2017 0:45

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà 

Avatar utente
Procopio
Linux 2.6
Linux 2.6
Messaggi: 798
Iscritto il: ven lug 29, 2011 11:50
Nome Cognome: Matteo Micheletto Oddino
Slackware: 14.1
Kernel: 4.5.2
Desktop: Awesome3
Località: Torino

Re: Formattazione e calcolo su liste python

Messaggioda Procopio » mar ago 08, 2017 18:17

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]))


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti