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