Joe Taylor Joe Taylor - 2 months ago 21
JSON Question

Split words into variables

I'm reading an MP3 radio stream using Python and it prints out something like this

INXS~Disappear~RADIOSTATION~~MUSIC~~~360000~~~


I'd like to separate the words and place them in their own table / field.

The above is Artist, SongName, RadioStation, MUSIC, some number which I don't know what it is and doesn't ever change.

I've found something called word split but unsure if that will work.

I'm also unsure if a space in the song or artist name will cause any problems. The space isn't an underscore or anything clever, it is literally a space.

#!/usr/bin/env python
import urllib2
import datetime
import requests



stream_url = 'http://stream....'
request = urllib2.Request(stream_url)
try:
request.add_header('Icy-MetaData', 1)
response = urllib2.urlopen(request)
icy_metaint_header = response.headers.get('icy-metaint')
if icy_metaint_header is not None:
metaint = int(icy_metaint_header)
read_buffer = metaint+512
content = response.read(read_buffer)
title = content[metaint:].split("'")[1]
print title
# post_data = {'artist':'////', 'songname':'/////'}
# post_response = requests.post(url='http:///////.co.uk', data=post_data)
print datetime.datetime.now()
import json


except:
print 'null'
# print 'Error'
# print datetime.datetime.now()

Answer

You want to use the string's split method:

stream = "INXS~Disappear~RADIOSTATION~~MUSIC~~~360000~~~"
parts = stream.split("~")

with python it's even possible to directly assign the list elements returned by the split method to specific variables:

artist, songname, radiostation, music, number = [x for x in stream.split("~") if x]

I used a simple list comprehension to get rid of the empty elements in the list.

Instead of using a list comprehension you could use the filter built-in function to remove the empty elements:

 artist, songname, radiostation, music, number = filter(len, stream.split("~"))