user11476329
user11476329

Reputation:

Splitting a string into multiple variables that are subject to change

I have a string like this

b'***************** Winner Prediction *****************\nDate: 2019-08-27 07:00:00\nRace Key: 190827082808\nTrack Name: Mornington\nPosition Number: 8\nName: CONSIDERING\nFinal Odds: 17.3\nPool Final: 37824.7\n'

And in Python, I want to split this string into variables such as:

Date =  
Race_Key =  
Track_Name =  
Name =  
Final_Odds =  
Pool_Final = 

However, the string will always be in the same format, but the values will always be different, for example, the names may have two words in them so it needs to work with all cases.

I have tried:

s = re.split(r'[.?!:]+', pred0)
def search(word, sentences):
       return [i for i in sentences if re.search(r'\b%s\b' % word, i)]

But no luck there.

Upvotes: 1

Views: 87

Answers (3)

Derek Eden
Derek Eden

Reputation: 4618

you can split the string and parse it into a dict like this:

s = s.decode() #decode the byte string
n = s.split('\n')[1:-1] #split the string, drop the Winner Prediction and resulting last empty list entry

keys = [key.split(': ')[0].replace(': ','') for key in n] #get keys
vals = [val.split(': ')[1] for val in n] #get values for keys

results = dict(zip(keys,vals)) #store in dict

result :

Date             2019-08-27 07:00:00
Race Key         190827082808
Track Name       Mornington
Position Number  8
Name             CONSIDERING
Final Odds       17.3
Pool Final       37824.7

Upvotes: 0

Spaceship222
Spaceship222

Reputation: 849

Maybe you can try this:

p = b'***************** Winner Prediction *****************\nDate: 2019-08-27 07:00:00\nRace Key: 190827082808\nTrack Name: Mornington\nPosition Number: 8\nName: CONSIDERING\nFinal Odds: 17.3\nPool Final: 37824.7\n'
out = p.split(b"\n")[:-1][1:]
d = {}
for i in out:
    temp = i.split(b":")
    key = temp[0].decode()
    value = temp[1].strip().decode()
    d[key] = value
output would be:
{'Date': '2019-08-27 07',
 'Race Key': '190827082808',
 'Track Name': 'Mornington',
 'Position Number': '8',
 'Name': 'CONSIDERING',
 'Final Odds': '17.3',
 'Pool Final': '37824.7'}

Upvotes: 1

Selcuk
Selcuk

Reputation: 59219

You can use the following:

return [line.split(":", 1)[-1].strip() for line in s.splitlines()[1:]]

This will return (for your example input):

['2019-08-27 07:00:00', '190827082808', 'Mornington', '8', 'CONSIDERING', '17.3', '37824.7']

Upvotes: 1

Related Questions