Re: [Python] Manipolazione dati e alberi
grazie a tutti per le risposte... io ho bisogno di fare cut'n paste della sezione quote e per qualche strana ragione mi viene impaginato in quel modo li! Il giorno 29 settembre 2011 16:21, Antonio antoniopo...@gmail.com ha scritto: Anche Scrapy è ottima...con BeautifulSoup non riesci a fare xpath più complessi. 2011/9/28 Daniel Pyrathon piro...@gmail.com Ciao Balan Ho scritto un piccolo componente che fa il parsing di un file di testo (strutturato come vuoi tu) e ne ricava una lista di dizionari. Nel caso di: Serie A 18:00 Bologna Inter 1:3 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 Serie B 18:00 Bologna Inter 1:3 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 ritornerebbe: [{'teams': [{'final_score': '1:3', 'team_a': 'Bologna', 'team_b': 'Inter', 'time': '18:00'}, {'final_score': '1:0', 'team_a': 'Milan', 'team_b': 'Cesena', 'time': '20:45'}, {'final_score': '0:0', 'team_a': 'Napoli', 'team_b': 'Fiorentina', 'time': '20:45'}], 'title': 'Serie A'}, {'teams': [{'final_score': '1:3', 'team_a': 'Bologna', 'team_b': 'Inter', 'time': '18:00'}, {'final_score': '1:0', 'team_a': 'Milan', 'team_b': 'Cesena', 'time': '20:45'}, {'final_score': '0:0', 'team_a': 'Napoli', 'team_b': 'Fiorentina', 'time': '20:45'}], 'title': 'Serie B'}] Script: import re class TeamParser(object): def __init__(self, file_path): self._file_path = file_path self._result = None @property def result(self): if not self._result: self._result = self._parse_file() return self._result def _parse_file(self): file = open(self._file_path, 'r') current_series = None self._result = [] while True: line = file.readline().rstrip() # if file ended, dispose and finish if len(line) == 0: self._result.append(self._parse_team(current_series)) break # If new series, dispose and reset array if re.findall('Serie\s\w$', line): if current_series: self._result.append(self._parse_team(current_series)) current_series = [] # append new line in array current_series.append(line) file.close() return self._result def _parse_team(self, series): result = {'title' : series[0], 'teams' : []} index = 1 number_games = (len(series) -1) / 4 for team_index in xrange(number_games): team = series[index: index+4] result['teams'].append({'time' : team[0], 'team_a' : team[1], 'team_b' : team[2], 'final_score' : team[3]}) index += 4 return result x = TeamParser('path del tuo file') print x.result -- reuslts pastebin: http://pastebin.com/JN0pSQ0j Non penso funzioni con il tuo secondo file, in quel caso fai scraping, esistono tante belle librerie tra cui BeautifulSoup che è fantastica e interamente scritta in Python Un saluto, per qualsiasi cosa chiedi pure! Daniel Pyrathon Il giorno 28 settembre 2011 10:59, Balan Victor balan.vict...@gmail.comha scritto: in cosa consistono queste cose migliori?grazie Il giorno 28 settembre 2011 08:44, Enrico Franchi enrico.fran...@gmail.com ha scritto: Balan Victor wrote: penso di essere riuscito a fare cioè che volevo...che ne pensate? Diciamo che ti ho visto scrivere cose migliori... ;) -- . ..: -enrico- __**_ Python mailing list Python@lists.python.it http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- * PirosB3 http://pirosb3.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
On Wed, 28 Sep 2011 16:32:02 +0200, Alessandro Dentella san...@e-den.it wrote: (?Prisultato\d:\d) # 1:3 E quando fanno 10:0? -- Daniele Varrazzo - Develer S.r.l. http://www.develer.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
On Thu, Sep 29, 2011 at 02:05:05PM +0200, Daniele Varrazzo wrote: On Wed, 28 Sep 2011 16:32:02 +0200, Alessandro Dentella san...@e-den.it wrote: (?Prisultato\d:\d) # 1:3 E quando fanno 10:0? chissà se a scuola lo usano ancora, potrei dirti che sei stato attento e meriti un '+', usalo con diligenza!... ;-) sandro *:-) ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
Presupponendo che non sia olly e benji a giocare il risultato avrà 2 cifre in questo caso: \d{1,2}:\d{1,2} Il giorno 29 settembre 2011 14:08, Enrico Franchi enrico.fran...@gmail.comha scritto: Alessandro Dentella wrote: chissà se a scuola lo usano ancora, potrei dirti che sei stato attento e meriti un '+', usalo con diligenza!...;-) Un + non basta. ;) -- . ..: -enrico- __**_ Python mailing list Python@lists.python.it http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python -- * PirosB3 http://pirosb3.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
Anche Scrapy è ottima...con BeautifulSoup non riesci a fare xpath più complessi. 2011/9/28 Daniel Pyrathon piro...@gmail.com Ciao Balan Ho scritto un piccolo componente che fa il parsing di un file di testo (strutturato come vuoi tu) e ne ricava una lista di dizionari. Nel caso di: Serie A 18:00 Bologna Inter 1:3 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 Serie B 18:00 Bologna Inter 1:3 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 ritornerebbe: [{'teams': [{'final_score': '1:3', 'team_a': 'Bologna', 'team_b': 'Inter', 'time': '18:00'}, {'final_score': '1:0', 'team_a': 'Milan', 'team_b': 'Cesena', 'time': '20:45'}, {'final_score': '0:0', 'team_a': 'Napoli', 'team_b': 'Fiorentina', 'time': '20:45'}], 'title': 'Serie A'}, {'teams': [{'final_score': '1:3', 'team_a': 'Bologna', 'team_b': 'Inter', 'time': '18:00'}, {'final_score': '1:0', 'team_a': 'Milan', 'team_b': 'Cesena', 'time': '20:45'}, {'final_score': '0:0', 'team_a': 'Napoli', 'team_b': 'Fiorentina', 'time': '20:45'}], 'title': 'Serie B'}] Script: import re class TeamParser(object): def __init__(self, file_path): self._file_path = file_path self._result = None @property def result(self): if not self._result: self._result = self._parse_file() return self._result def _parse_file(self): file = open(self._file_path, 'r') current_series = None self._result = [] while True: line = file.readline().rstrip() # if file ended, dispose and finish if len(line) == 0: self._result.append(self._parse_team(current_series)) break # If new series, dispose and reset array if re.findall('Serie\s\w$', line): if current_series: self._result.append(self._parse_team(current_series)) current_series = [] # append new line in array current_series.append(line) file.close() return self._result def _parse_team(self, series): result = {'title' : series[0], 'teams' : []} index = 1 number_games = (len(series) -1) / 4 for team_index in xrange(number_games): team = series[index: index+4] result['teams'].append({'time' : team[0], 'team_a' : team[1], 'team_b' : team[2], 'final_score' : team[3]}) index += 4 return result x = TeamParser('path del tuo file') print x.result -- reuslts pastebin: http://pastebin.com/JN0pSQ0j Non penso funzioni con il tuo secondo file, in quel caso fai scraping, esistono tante belle librerie tra cui BeautifulSoup che è fantastica e interamente scritta in Python Un saluto, per qualsiasi cosa chiedi pure! Daniel Pyrathon Il giorno 28 settembre 2011 10:59, Balan Victor balan.vict...@gmail.comha scritto: in cosa consistono queste cose migliori?grazie Il giorno 28 settembre 2011 08:44, Enrico Franchi enrico.fran...@gmail.com ha scritto: Balan Victor wrote: penso di essere riuscito a fare cioè che volevo...che ne pensate? Diciamo che ti ho visto scrivere cose migliori... ;) -- . ..: -enrico- __**_ Python mailing list Python@lists.python.it http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- * PirosB3 http://pirosb3.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
in cosa consistono queste cose migliori?grazie Il giorno 28 settembre 2011 08:44, Enrico Franchi enrico.fran...@gmail.comha scritto: Balan Victor wrote: penso di essere riuscito a fare cioè che volevo...che ne pensate? Diciamo che ti ho visto scrivere cose migliori... ;) -- . ..: -enrico- __**_ Python mailing list Python@lists.python.it http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
On Wed, Sep 28, 2011 at 12:57:09AM +0200, Balan Victor wrote: interessante la tua tesi... penso di essere riuscito a fare cio che volevo...che ne pensate? A me piaciono di più le espressioni regolari in questi casi: Serie A 18:00 Bologna Inter 1:3 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 Serie B1 18:00 Ascoli Verona 1:3 import re def parse(m): #print girone_attivo, m.groups() print m.groupdict() PATTERN = re.compile(r # orario, in_casa... saranno keys di m.groupdict (?Porario\d\d:\d\d)\n # 18:30 (?Pin_casa.*)\n# Bologna (?Pfuori_casa.*)\n # Inter (?Prisultato\d:\d) # 1:3 ,re.VERBOSE | re.MULTILINE) serie = re.split('Serie ([A-D][0-9]?).*', __doc__) for girone in serie[1:]: # ignora il promo elemento (prima della prima 'Serie') if len(girone)= 2: # serie è una lista con A righe B righe girone_attivo = girone else: re.sub(PATTERN, parse, girone) sandro *:-) -- Sandro Dentella *:-) http://www.reteisi.org Soluzioni libere per le scuole http://sqlkit.argolinux.orgSQLkit home page - PyGTK/python/sqlalchemy ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
On Monday, September 26, 2011, Enrico 'Henryx' Bianchi henry...@yahoo.it wrote: On Sunday, September 25, 2011 02:00:27 AM Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Giusto per chiedere, chi produce questo file? Ovvero, e` un file compilato a mano oppure prodotto da un sistema automatizzato? Enrico ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
Balan Victor wrote: per ogni campionato ci sono un numero variabile di partite. Ok. Allora e' appena piu' complesso. Per certi versi la cosa piu' semplice sarebbe usare un oggetto tipo ply (ora ci sono cose piu' moderne e pitoniche, ma mi scappano i nomi). Ovvero un parser generator. La grammatica del tuo file e' parecchio facile da scrivere... Come token hai una data (puoi anche, se vuoi, aggiungerci come azione il controllo che sia valida), un risultato e poi un nome (o se vuoi piu' semantica, nomi di squadra e campionato). A questo punto scrivi facile facile... e la parte rognosa se la sbatte lui. -- . ..: -enrico- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
Il 25/09/2011 02:00, Balan Victor ha scritto: salve a tutti ho un file di testo che contiene i seguenti dati: Serie A 18:00(ora di gioco) Bologna(squadra di casa) Inter(squadra in trasferta) 1:3(risultato) Abbastanza facile da leggere, perchè regolare. Leggi il file riga per riga: quando incontri una riga che comincia con Serie, leggi le successive 4 righe e accumula i dati. [...] Ciao Manlio ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
On Sunday, September 25, 2011 02:00:27 AM Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Giusto per chiedere, chi produce questo file? Ovvero, e` un file compilato a mano oppure prodotto da un sistema automatizzato? Enrico ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
On Monday, September 26, 2011, Enrico 'Henryx' Bianchi henry...@yahoo.it wrote: On Sunday, September 25, 2011 02:00:27 AM Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Giusto per chiedere, chi produce questo file? Ovvero, e` un file compilato a mano oppure prodotto da un sistema automatizzato? Enrico ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
2011/9/26 Marco Beri marcob...@gmail.com On Monday, September 26, 2011, Enrico 'Henryx' Bianchi henry...@yahoo.it wrote: On Sunday, September 25, 2011 02:00:27 AM Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Giusto per chiedere, chi produce questo file? Ovvero, e` un file compilato a mano oppure prodotto da un sistema automatizzato? Sigh... partita per errore (ok, ok, sul cello non c'è l'undo :-). Intendevo dire: io voto per uno scraping di qualche sito. Ciao. Marco. -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
è un file generato con un copia incolla. il sito di origine è diretta.it qualcuno adesso mi dirà di usare qualche libreria tipo mechanize ed è quello che poi farò però voglio provare a risolvere il problema del file di testo anche di fare un po di pratica. allego anche un file di esempio. Il giorno 26 settembre 2011 20:51, Marco Beri marcob...@gmail.com ha scritto: 2011/9/26 Marco Beri marcob...@gmail.com On Monday, September 26, 2011, Enrico 'Henryx' Bianchi henry...@yahoo.it wrote: On Sunday, September 25, 2011 02:00:27 AM Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Giusto per chiedere, chi produce questo file? Ovvero, e` un file compilato a mano oppure prodotto da un sistema automatizzato? Sigh... partita per errore (ok, ok, sul cello non c'è l'undo :-). Intendevo dire: io voto per uno scraping di qualche sito. Ciao. Marco. -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python AFRICA: CAF Champions League1 X 2 17:00 Enyimba Cotonsport 2 : 0 1.83 3.30 3.80 17:00 Raja Casablanca Al-Hilal 0 : 0 3.00 3.00 2.25 AFRICA: CAF Confederation Cup 1 X 2 16:00 ASEC Mimosas Interclube 1 : 0 - - - 16:00 Kaduna Africain 0 : 1 - - - ARGENTINA: Primera División - Apertura 1 X 2 02:15 San Lorenzo Atl. Rafaela 1 : 3 2.05 2.90 3.60 19:00 Newells Old Boys Velez Sarsfield 1 : 1 2.60 2.90 2.60 21:00 Estudiantes Argentinos Jrs 4 : 3 1.72 3.20 4.60 23:10 Lanus Boca Juniors 1 : 2 2.55 2.95 2.65 AUSTRIA: T-Mobile Bundesliga1 X 2 16:00 Salzburg Neustadt 3 : 0 1.18 5.75 11.00 16:00 Sturm Innsbruck 1 : 1 1.78 3.40 3.90 18:30 Mattersburg Austria Vienna 2 : 4 4.00 3.50 1.75 BELGIO: Jupiler League 1 X 2 14:30 Gent Anderlecht 0 : 1 2.50 3.20 2.50 18:00 Genk St. Liege 3 : 0 2.20 3.20 2.90 20:30 Lokeren Club Brugge 1 : 2 4.25 3.40 1.72 BELGIO: EXQI League 1 X 2 15:00 Heist Aalst 1 : 3 - - - 15:00 Tienen Vise 4 : 1 - - - BIELORUSSIA: Vysshaya Liga 1 X 2 18:00 BATE Naftan 2 : 0 - - - BOLIVIA: Liga de Futbol Prof - Apertura 1 X 2 21:30 Nacional Potosi Real Potosi 0 : 0 - - - 21:30 The Strongest Bolivar 3 : 5 - - - 22:00 Real Mamore Guabira 0 : 2 - - - BOSNIA HERZEGOVINA: Premier League1 X 2 19:00 Olimpik Sarajevo Borac Banja Luka 2 : 1 - - - 19:00 Siroki Brijeg Slavija 5 : 0 - - - 19:00 Zeljeznicar Gradacac 1 : 0 - - - 19:00 Zrinjski Sloboda 2 : 0 - - - BRASILE: Campeonato Brasileiro 1 X 2 21:00 Atletico-PR Figueirense 0 : 0 2.00 3.20 3.40 21:00 Avai Palmeiras 1 : 1 2.65 3.20 2.40 21:00 Bahia Fluminense 3 : 0 2.55 3.10 2.50 21:00 Botafogo RJ Flamengo 1 : 1 2.20 3.00 3.10 21:00 Corinthians Santos 1 : 3 1.85 3.30 3.75 23:00 Cruzeiro America Mineiro 0 : 0 1.62 3.50 5.00 23:00 Internacional Coritiba 1 : 1 1.83 3.30 3.80 BULGARIA: A PFG 1 X 2 15:30 Cherno More Ludogorets 0 : 1 2.25 3.20 2.85 15:30 Slavia Sofia Lok. Sofia 2 : 1 1.65 3.40 4.75 CANADA: CSL 1 X 2 01:00 Border Stars North York 5 : 1 - - - 01:00 Capital City St. Catharines 6 : 0 - - - 19:00 Montreal St. Catharines 5 : 1 - - - CINA: Super League 1 X 2 11:00 Shaanxi Zhongjian Jiangsu Sainty 0 : 0 - - - 13:30 Changchun Yatai Guangzhou 2 : 1 - - - 13:30 Shandong Luneng Dalian Shide 0 : 0 - - - 13:30 Shenzhen Ruby Beijing Guoan 0 : 3 - - - 13:30 Tianjin Teda Hangzhou Greentown 2 : 2 - - - CIPRO: First Division 1 X 2 17:00 Ol. Nicosia APOEL 1 : 4 - - - 18:00 Nea Salamis Ermis 1 : 0 - - - COLOMBIA: Liga Postobon - Finalización 1 X 2 01:20 Tolima Ind. Medellin 2 : 0 - - - 03:00 America De Cali Itagui 2 : 1 - - - 03:00 Atl. Nacional Huila 1 : 2 - - - 20:00 La Equidad Santa Fe 2 : 1 - - - 22:30 Real Cartagena Chico 0 : 1 - - - COSTARICA: Primera División - Torneo Invernale 1 X 2 04:00 Herediano San Carlos 5 : 0 - - - 19:00 Cartagines Puntarenas 3 : 0 - - - 19:00 Orion Alajuelense 1 : 1 - - - 23:30 Limon Zeledon 1 : 0 - - - CROAZIA: 1. HNL 1 X 2 20:00 Karlovac Osijek 2 : 0 2.45 3.10 2.60 DANIMARCA: Superliga1 X 2 14:00 Midtjylland Sonderjyske 2
Re: [Python] Manipolazione dati e alberi
On Monday, September 26, 2011 09:37:15 PM Balan Victor wrote: il sito di origine è diretta.it Usa subito uno strumento di parsing della pagina. I dati presenti sul sito hanno gia` una struttura, di conseguenza e` inutile che cerchi di replicarla a mano (ovvero, scarichi la pagina che ti interessa, la parsi e ti tiri fuori i dati che ti interessano dalla tabella che gia` esiste) Enrico ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Serie A 18:00(ora di gioco) Bologna(squadra di casa) Inter(squadra in trasferta) 1:3(risultato) 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 Serie B ... ... ecc ecc voglio manipolare questo file di testo in modo da avere il seguente output: Serie A 18:00 Bologna Inter 1-3 . Non riesco a trovare un algoritmo per effettuare la manipolazione. Qualcuno mi sa aiutare? Mi sa che mi sono perso qualcosa, ma... 0. Se il file di testo e' vuoto, esci 1. Leggi 4 linee 2. Strippale e joinale. 3. goto 0. No? -- . ..: -enrico- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Manipolazione dati e alberi
il problema è che il file è cosi formato: -Nome del campionato -ora -squadra casa -squadra trasferta -risultato -ora -squadra casa -squadra trasferta -risultato -Nome del campionato -ora -squadra casa -squadra trasferta -risultato -ora ecc per ogni campionato ci sono un numero variabile di partite. Il giorno 25 settembre 2011 10:35, Enrico Franchi enrico.fran...@gmail.comha scritto: Balan Victor wrote: salve a tutti ho un file di testo che contiene i seguenti dati: Serie A 18:00(ora di gioco) Bologna(squadra di casa) Inter(squadra in trasferta) 1:3(risultato) 20:45 Milan Cesena 1:0 20:45 Napoli Fiorentina 0:0 Serie B ... ... ecc ecc voglio manipolare questo file di testo in modo da avere il seguente output: Serie A 18:00 Bologna Inter 1-3 . Non riesco a trovare un algoritmo per effettuare la manipolazione. Qualcuno mi sa aiutare? Mi sa che mi sono perso qualcosa, ma... 0. Se il file di testo e' vuoto, esci 1. Leggi 4 linee 2. Strippale e joinale. 3. goto 0. No? -- . ..: -enrico- __**_ Python mailing list Python@lists.python.it http://lists.python.it/**mailman/listinfo/pythonhttp://lists.python.it/mailman/listinfo/python ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python