'''
Created on Jul 11, 2014
@author: Brett Paufler
Copyright Brett Paufler
'''
'''
STEP THREE
(which means two other things should have been done first)
01 - base pages
02 - scratchers pages
'''
import os
import re
import pickle
from lotto_class import prizeLevel
from lotto_class import lotteryGame
def getScratcherFilesList(sString="SGAME", directory="lottery",):
'''
returns a list of the scratcher game files from the lottery directory
Need to download by running:
1 - lotto_download_html
2 - downloadSGame
If no seed files in directory, this returns an empty set
'''
print "getScratcherFilesList starting"
# prepare sString
if not directory == "":
directory = ".\\" + directory
dirListing = os.listdir(directory)
temp = []
#qualify files
for item in dirListing:
if item.startswith(sString):
temp.append(item)
print item
print "getScratcherFilesList ending\n\n"
return temp
def extractPrizeLevels(pL, tP):
'''takes the list of prizes (pL)
and returns a prizeList object instead
'''
print "extractPrizeLevels(pL) starting"
pDL=[]
for i in range(len(pL)/5):
i = 5*i
a = prizeLevel()
a.prize = int(pL[i])
a.odds = int(pL[i+1])
a.quantity = int(pL[i+2])
a.claimed = int(pL[i+3])
a.available = int(pL[i+4])
a.returnPerDollar = float(a.prize) / float(tP) / float(a.odds)
pDL.append(a)
pDL = sorted(pDL, key=lambda k: k.prize, reverse=True)
#print pDL
print "extractPrizeLevels(pL) ending"
return pDL
def findMaxPrizeStats(pL):
'''given a list of prizeObjects
return the max prize amount
'''
print "findMaxPrizeStats"
mP = 0
mPO = 0
for p in pL:
#print '\n\nfor p'
#print p.fullPrintPrizes()
#print p.prize
if p.prize > mP:
mP = p.prize
mPO = p.odds
return mP,mPO
def scratchersData():
'''Goes through the contents of the passed file list
and returns a composite list of all gameData
This is what will be analyzed
returns list of scratcherGameObjects
gD = {'name':gN,
'price':tP,
'prizes':extractPrizeLevels(pL)
}
'''
print "scratchersData() starting"
data = []
gameFiles=getScratcherFilesList()
for sFile in gameFiles:
filePath = ".\\lottery\\" + sFile
page = open(filePath, 'r')
gD = lotteryGame()
gD.name = "s" + re.search(r'([0-9]{1,5})(?=.html)', sFile).group(0)
gD.fileName = sFile
for line in page:
if "Ticket Price: $" in line:
#print line
tP = re.search(r'Ticket Price: ...', line).group(0)
tP = tP[-2:]
gD.price = int(tP)
#print tP
if line.startswith("
"):
#rawGameData
rawGD = line
rawGD = rawGD.replace(",","")
rawGD = rawGD.replace(" |
","")
rawGD = rawGD.replace(r"
","")
rawGD = rawGD.replace("","")
rawGD = rawGD.replace(r"\n","")
rawGD = rawGD.strip()
rawGD = rawGD.replace(r"$","")
rawGD = rawGD.replace(r"Ticket",tP)
rawGD = rawGD[:-5]
pL = rawGD.split(r' | ')
gD.prizes = extractPrizeLevels(pL, tP)
#x, y = findMaxPrizeStats(gD.prizes)
#gD.maxPrize = x
#gD.maxPrizeStraightOdds = y
#print gD.printLotteryGameData()
data.append(gD)
data.sort(key=lambda x: int(x.name[1:]))
print "\n\nscratchersData() ending\n\n"
return data
def extractDrawGamesData():
'''
'''
print "\n\nextractDrawGamesData starting"
with open(r'.\lottery\DRAWdrawGames.html', 'r') as drawFile:
rS = drawFile.read()
pV = re.findall('h2(.*?)h2', rS, re.DOTALL)
pV = [p for p in pV if len(pV) < 40]
pV = [p for p in pV if r"$" in p]
pV = [p for p in pV if not r"
" in p]
mL = []
for p in pV:
p = p[1:-2].strip()
p = p.replace(" MILLION", "000000")
p = p.replace(",", "")
print p
p = p.replace("$", "")
mL.append(p)
print mL
pB = int(mL[0]) # powerBall
mM = int(mL[1]) # megaMillion
sL = int(mL[2]) # superLotto
fF = int(mL[3]) # fantasyFive
dF = int(mL[4]) # dailyFour
dT = int(mL[5]) # dailyThree
dD = int(mL[6]) # dailyDerby
return (pB, mM, sL, fF, dF, dT, dD)
#print extractDrawGamesData()
def secondParimutualPrize(fileName):
'''finds the second place powerBall & megaMillions parimutual amount
very brittle, not dialed in at all
'''
print "finding powerBallFive()"
with open(fileName, 'r') as drawFile:
rS = drawFile.read()
rS = rS[rS.find("Detailed Draw"):]
rS = rS[rS.find(r'5'):1000]
if rS[14] == "0":
rS = rS[25:37]
print rS
rS = rS.replace(",","")
rS = rS.replace("<","")
rS = rS.replace(">","")
rS = rS.replace("t","")
rS = rS.replace("d","")
rS = rS.replace(r"/","")
rS = rS.replace("r","")
print "Powerball Five Match %s" % rS
return int(rS)
else:
print "Powerball Five previous Winner returning 200000"
return 200000
print rS
#powerBallFive()
def initializeDrawGames():
'''returns a list of gameObjects
for the various lottery draw games
Only the high prize is dynamic
rest are hard set and mostly guesses
'''
print "initializeDrawGames() started"
pBP, mMP, sLP, fFP, dFP, dTP, dDP = extractDrawGamesData()
pB = lotteryGame()
pB.name = "powerBall"
pB.fileName = "DRAW-powerball.html"
pB.price = 2
pB.prizes.append(prizeLevel(prize=pBP, odds=175223510))
second = secondParimutualPrize(r'.\lottery\DRAW-powerball.html')
pB.prizes.append(prizeLevel(prize=second, odds=5153633))
pB.prizes.append(prizeLevel(prize=10000, odds=648976))
pB.prizes.append(prizeLevel(prize=75, odds=19088))
pB.prizes.append(prizeLevel(prize=75, odds=12245))
pB.prizes.append(prizeLevel(prize=6, odds=360))
pB.prizes.append(prizeLevel(prize=6, odds=706))
pB.prizes.append(prizeLevel(prize=3, odds=111))
pB.prizes.append(prizeLevel(prize=3, odds=55))
for p in pB.prizes:
p.returnPerDollar = float(p.prize) / float(pB.price) / float(p.odds)
mM = lotteryGame()
mM.name = "megaMillions"
mM.fileName = "DRAW-megaMillions.html"
mM.price = 1
mM.prizes.append(prizeLevel(prize=mMP, odds=258890850))
second = secondParimutualPrize(r'.\lottery\DRAW-megaMillions.html')
mM.prizes.append(prizeLevel(prize=second, odds=18492204))
mM.prizes.append(prizeLevel(prize=6500, odds=739688))
mM.prizes.append(prizeLevel(prize=500, odds=52835))
mM.prizes.append(prizeLevel(prize=40, odds=10720))
mM.prizes.append(prizeLevel(prize=7, odds=766))
mM.prizes.append(prizeLevel(prize=5, odds=473))
mM.prizes.append(prizeLevel(prize=2, odds=56))
mM.prizes.append(prizeLevel(prize=1, odds=21))
for p in mM.prizes:
p.returnPerDollar = float(p.prize) / float(mM.price) / float(p.odds)
sL = lotteryGame()
sL.name = "superLotto"
sL.fileName = "DRAW-superLotto.html"
sL.price = 1
sL.prizes.append(prizeLevel(prize=sLP, odds=41416353))
sL.prizes.append(prizeLevel(prize=20000, odds=1592937))
sL.prizes.append(prizeLevel(prize=1000, odds=197221))
sL.prizes.append(prizeLevel(prize=90, odds=7585))
sL.prizes.append(prizeLevel(prize=50, odds=4810))
sL.prizes.append(prizeLevel(prize=10, odds=185))
sL.prizes.append(prizeLevel(prize=10, odds=361))
sL.prizes.append(prizeLevel(prize=2, odds=74))
sL.prizes.append(prizeLevel(prize=1, odds=49))
for p in sL.prizes:
p.returnPerDollar = float(p.prize) / float(sL.price) / float(p.odds)
fF = lotteryGame()
fF.name = "fantasy5"
fF.fileName = "DRAW-fantasy5.html"
fF.price = 1
fF.prizes.append(prizeLevel(prize=fFP, odds=575757))
fF.prizes.append(prizeLevel(prize=400, odds=3387))
fF.prizes.append(prizeLevel(prize=15, odds=103))
fF.prizes.append(prizeLevel(prize=1, odds=10))
for p in fF.prizes:
p.returnPerDollar = float(p.prize) / float(fF.price) / float(p.odds)
dD = lotteryGame()
dD.name = "dailyDerby"
dD.fileName = "DRAW-dailyDerby.html"
dD.price = 2
dD.prizes.append(prizeLevel(prize=dDP, odds=1320000)) #tri & time
dD.prizes.append(prizeLevel(prize=4500, odds=147000)) #exact & time
dD.prizes.append(prizeLevel(prize=455, odds=13200)) #win & time
dD.prizes.append(prizeLevel(prize=45, odds=1321)) #trifecta
dD.prizes.append(prizeLevel(prize=24, odds=147)) #exacta
dD.prizes.append(prizeLevel(prize=2, odds=13.2)) #win
dD.prizes.append(prizeLevel(prize=47, odds=1001)) #time only
for p in dD.prizes:
p.returnPerDollar = float(p.prize) / float(dD.price) / float(p.odds)
d3 = lotteryGame()
d3.name = "daily3"
d3.fileName = "DRAW-daily3.html"
d3.price = 1
d3.prizes.append(prizeLevel(prize=500, odds=1000))
for p in d3.prizes:
p.returnPerDollar = float(p.prize) / float(d3.price) / float(p.odds)
d4 = lotteryGame()
d4.name = "daily4"
d4.fileName = "DRAW-daily4.html"
d4.price = 1
d4.prizes.append(prizeLevel(prize=5000, odds=10000))
for p in d4.prizes:
p.returnPerDollar = float(p.prize) / float(d4.price) / float(p.odds)
print "initializeDrawGames() finished\n\n"
rL = [pB, mM, sL, fF, dD, d3, d4]
return rL
def initializeALLGames():
'''return a list of all lottery game objects
'''
print "initializeALLGames() starting"
gD = initializeDrawGames()
dD = scratchersData()
for d in dD:
gD.append(d)
with open(r'.\lottery\01-lottoPickleData.txt', 'wb') as f:
pickle.dump(gD,f)
with open(r'.\lottery\02-lottoEasyReadData.txt', 'wb') as f:
for g in gD:
print "writing to file %s" % g.name
f.write("GAME: %s\n" % g.name)
f.write(g.fileName)
f.write("\nTicket Price: %d\n" % g.price)
#f.write("maxPrizeRecursiveOdds %f\n" % g.maxPrizeRecursiveOdds)
f.write("prizes\n")
for p in g.prizes:
f.write("P: %d, O: %d, Q: %d, C: %d, A: %d, RPD: %f\n" % (
p.prize, p.odds, p.quantity, p.claimed, p.available, p.returnPerDollar))
f.write('\n\n')
print "initializeALLGames() ending"
return gD
if __name__ == '__main__':
print "downloading all scratchers"
initializeALLGames()
|