gaganbm
gaganbm

Reputation: 2843

Split stock quote to tokens in Python

I need to read a text file of stock quotes and do some processing with each stock data (i.e. a line in the file).

The stock data looks like this :

[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']

How do I split the line into tokens where each token is what is enclosed in the square braces, .i.e. for the above line, the tokens should be "class, 'STOCK'" , "symbol, 'AAII'" etc.

Upvotes: 0

Views: 172

Answers (4)

lucasg
lucasg

Reputation: 11012

import re

s = "[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"

m = re.findall(r"([a-zA-Z0-9]+),([a-zA-Z0-9']+)", s)
d= { x[0]:x[1] for x in m }

print d

you can run the snippet here : http://liveworkspace.org/code/EZGav$35

Upvotes: 1

Ofiris
Ofiris

Reputation: 6151

Start with:

re.findall("[^,]+,[^,]+", a)

This would give you a list of:

[class,'STOCK'], [symbol,'AAII'] and such, then you could cut the brackets.

If you want a functional one liner, use:

map(lambda x: x[1:-1], re.findall("[^,]+,[^,]+", a))

The first part splits every second ,, the map (for each item in the list, use the lambda function..) cuts the brackets.

Upvotes: 1

A human being
A human being

Reputation: 1220

Try this code:

#!/usr/bin/env python3

import re

str="[class,'STOCK'],[symbol,'AAII'],[open,2.60],[high,2.70],[low,2.53],[close,2.60],[volume,458500],[date,'21-Dec-04'],[openClosePDiff,0.0],[highLowPDiff,0.067],[closeEqualsLow,'false'],[closeEqualsHigh,'false']"
str = re.sub('^\[','',str)
str = re.sub('\]$','',str)
array = str.split("],[")
for line in array:
    print(line)

Upvotes: 1

user21033168
user21033168

Reputation: 444

print(re.findall("\[(.*?)\]", inputline))

Or perhaps without regex:

print(inputline[1:-1].split("],["))

Upvotes: 3

Related Questions