Pagina 1 di 1

[RISOLTO] Formattazione e calcolo su liste python

Inviato: ven 4 ago 2017, 16:21
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]))

Re: Formattazione e calcolo su liste python

Inviato: dom 6 ago 2017, 16:03
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)

Re: Formattazione e calcolo su liste python

Inviato: mar 8 ago 2017, 0:45
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

Re: Formattazione e calcolo su liste python

Inviato: mar 8 ago 2017, 18:17
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]))