Python中将股票报价拆分为令牌
我需要读取股票报价的文本文件,并对每个股票数据(即文件中的一行)进行一些处理 股票数据如下所示:Python中将股票报价拆分为令牌,python,regex,string,Python,Regex,String,我需要读取股票报价的文本文件,并对每个股票数据(即文件中的一行)进行一些处理 股票数据如下所示: [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,'f
[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']
如何将行拆分为标记,其中每个标记都包含在方括号中,即。对于上面的行,令牌应该是“class,'STOCK'”
,“symbol,'AAII'
等。打印(关于findall(\[(.*?\]),inputline))
或者可能没有正则表达式:
print(inputline[1:-1]。拆分(“]),[”)
print(re.findall(“\[(?)\”),inputline))
或者可能没有正则表达式:
打印(输入行[1:-1]。拆分(“],[”)
请尝试以下代码:
#!/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)
请尝试以下代码:
#!/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)
首先:
re.findall("[^,]+,[^,]+", a)
这将为您提供以下列表:
[class,'STOCK']
,[symbol,'AAII']
诸如此类,然后您可以剪切括号
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
如果您想要功能性单衬里,请使用:
map(lambda x:x[1:-1],re.findall(“[^,]+,[^,]+”,a))
第一部分每秒拆分一次,
,映射(对于列表中的每个项目,使用lambda
函数..)剪切括号。从以下开始:
re.findall("[^,]+,[^,]+", a)
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
这将为您提供以下列表:
[class,'STOCK']
,[symbol,'AAII']
诸如此类,然后您可以剪切括号
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
如果您想要功能性单衬里,请使用:
map(lambda x:x[1:-1],re.findall(“[^,]+,[^,]+”,a))
第一部分每秒拆分一次,
,映射(对于列表中的每个项目,使用lambda
函数..)剪切括号
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
您可以在此处运行代码段:http://liveworkspace.org/code/EZGav35美元
您可以在此处运行代码段:
http://liveworkspace.org/code/EZGav$35
输出是一个字符串列表?@Ofiris是的,输出是一个令牌列表,其中每个令牌都是一个字符串string@Dhara我尝试了一些我从SO获得的正则表达式,例如print(re.findall('\[^\]*\]\\\\\\\\\\“[^\”]*\“\\\S+”,str))
。但这不起作用。输出是一个字符串列表?@Ofiris是的,输出是一个令牌列表,其中每个令牌都是一个字符串string@Dhara我尝试了一些我从SO获得的正则表达式,例如print(re.findall('\[^\]*\]\\\\\\\\\\\“[^\”]*\“\\\S+”,str))
。但这不起作用。你给出的非正则表达式解决方案也是我的第一个想法。它不是很健壮,但是如果数据足够一致,那么读入它将有助于以更合理的格式重写它。你给出的非正则表达式解决方案也是我的第一个想法。它不是很健壮,但是如果数据足够一致,那么读入它将有助于以更合理的格式重写它。。