Δημοσιεύτηκε: 06 Ιούλ 2011, 14:35
από pmav99
Γίνεται και χωρίς RE. Αντιστρέφεις το string και κάνεις split σε όλες εκτός από την τελευταία εμφάνιση του ",". Ξανααντιστρέφεις τα νέα string και επιστρέφεις τη λίστα που δημιουργήθηκε. Δεν είναι full-proof αλλά δουλεύει.
Κώδικας: Επιλογή όλων

import codecs

RADIOLIST = 'radiolist.js'

class PlaylistGenerator:
def __init__(self):
self.stations = []

self.read_stations()

def read_stations(self):
with codecs.open(RADIOLIST, 'r', 'iso-8859-7') as f:
text = f.readlines() # Create a list with the lines
text = text[1:-1] # Remove first and last lines
text[-1] += "," # Add a comma at the last entry
for i,line in enumerate(text):
line = line[2:-4] # clean-up each line

line = self._split_line(line)

self.stations.append(dict(
(k.strip(), v.strip()) for k,v in (
item.split(":", 1) for item in line)))

def _split_line(self, s, sep = ",", ignore = 1):
"""
reverses string s and splits it at sep.
The first `ignore` occurences of sep are ingored
"""
numbers = max(s.count(sep) - ignore, 0)
new_s = []
rev_s = s[::-1]
rev_s = rev_s.split(sep, numbers)
for item in rev_s:
new_s.append(item.strip()[::-1])
return new_s

if __name__ == '__main__':
playlist = PlaylistGenerator()
for dic in playlist.stations:
for key, value in dic.iteritems():
print key, value

Off topic:
ως pmav99 είμαι και στο github