[Python] Manipolazione dati e alberi
Daniel Pyrathon
pirosb3 a gmail.com
Mer 28 Set 2011 14:11:07 CEST
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.victor0 at gmail.com> ha
scritto:
> in cosa consistono queste cose migliori?grazie
>
> Il giorno 28 settembre 2011 08:44, Enrico Franchi <
> enrico.franchi at 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 at lists.python.it
>> http://lists.python.it/**mailman/listinfo/python<http://lists.python.it/mailman/listinfo/python>
>>
>
>
> _______________________________________________
> Python mailing list
> Python at lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
>
--
*************
PirosB3
http://pirosb3.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.python.it/pipermail/python/attachments/20110928/af1188fa/attachment.html>
Maggiori informazioni sulla lista
Python