[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