我尝试从文本文件制作Dataframe。我使用的是我在Internet上找到的代码,但卡住了一点,而且我不知道该如何前进。
PokerStars Hand#135139509095:Hold'em No Limit($ 0.25 / $ 0.50 USD)-2015/05/13 2:26:41 ET
表'Castafiore II'6人座2号座位是按钮
座位1:Mastiksou855(筹码$ 50)
座位2:tiagosydney(筹码$ 67.98)
座位3:parisvii1986(筹码49.94美元)
第4席:Johnii141(筹码$ 50)
第5席:DavidRandis(筹码量为36.59美元)
第6座:malabar357(筹码$ 50)
*孔卡*
DavidRandis:跟注$ 0.50
malabar357:折叠
Mastiksou855:折叠
tiagosydney:筹集了1美元,达到了1.50美元
parisvii1986:褶皱
Johnii141:折叠
DavidRandis:调用$ 1
* FLOP * [Jd 9c Tc]
* TURN * [Jd 9c Tc] [4s]
*摘要*
总底池$ 3.75 |抽水$ 0.17
董事会[Jd 9c Tc 4s]
第5个席位:DavidRandis获利($ 3.58)
PokerStars Hand#135139512060:Hold'em No Limit($ 0.25 / $ 0.50 USD)-2015/05/13 2:26:52 ET
'Artek II'6人座5号座位是按钮
座位1:Johnii141(筹码$ 50)
座位2:MASSOS17(40美元筹码)
第4席:jayceee16(筹码$ 53.21)
第5席:Mastiksou855(筹码$ 50)
第6座:malabar357(筹码$ 50)
malabar357:发布小盲注$ 0.25
*孔卡*
*摘要*
总底池$ 2.75 |抽水$ 0.12
董事会[7h Td Jc]
座位1:Johnii141(大盲注)在翻牌圈前折叠
座位2:MASSOS17已收集(2.63美元)
座位4:jayceee16在翻牌圈折叠了
第5席:Mastiksou855(按钮)在翻牌前折叠(没有下注)
第6席:malabar357(小盲注)在翻牌前折叠
这不是完整的扑克牌。只需在此处粘贴2张扑克手作为示例,向您展示其外观。 完整的五手扑克示例已在此处上传:https://ufile.io/y573n
def parse_file(line):
tab1 = []
with open(filepath,'r') as file:
line = file.readline()
while line:
reg_match = _reglib(line)
if reg_match.soft:
soft = reg_match.soft.group()
if reg_match.hand_id:
hand_id = reg_match.hand_id.group(1)
if reg_match.game_type:
game_type = reg_match.game_type.group()
if reg_match.sb:
sb = reg_match.sb.group(1)
if reg_match.bb:
bb = reg_match.bb.group(1)
if reg_match.date:
date = reg_match.date.group(1)
hour = reg_match.date.group(2)
date_type = reg_match.date.group(3)
line = file.readline()
if reg_match.table:
table = reg_match.table.group(1)
if reg_match.rake:
rake = reg_match.rake.group(1)
dict_of_data ={
'Soft' :soft,
'Hand_ID': hand_id,
'Game_type':game_type,
'SB':sb,
'BB':bb,
'Date':date,
'Hour':hour,
'Date_type':date_type,
'Table':table,
'Rake':rake
}
tab1.append(dict_of_data)
line = file.readline()
tab1 = pd.DataFrame(tab1)
tab1.set_index(['Soft', 'Hand_ID', 'Game_type'], inplace=True)
tab1 = tab1.groupby(level=tab1.index.names).first()
return tab1
class _reglib:
pat_soft = re.compile('Poker\w+')
pat_hand_id = re.compile(r'#(\d+):')
pat_game_type = re.compile('Hold\'em\s\w+\s\w+')
pat_sb = re.compile('\$(\d+\.?\d+)/')
pat_bb = re.compile('/\$(\d+\.?\d+)\s\w+')
pat_date = re.compile('(\d+/\d+/\d+)\s(\d+:\d+:\d+)\s(C?ET)')
pat_table = re.compile('Table\s\'(\w+...)\'')
pat_seat = re.compile('(Seat\s\d):\s(\w+)\s\(\$')
pat_rake = re.compile('Rake\s\$(...)')
def __init__(self, line):
# check whether line has a positive match with all of the regular expressions
self.soft = self.pat_soft.search(line)
self.hand_id = self.pat_hand_id.search(line)
self.game_type = self.pat_game_type.search(line)
self.sb = self.pat_sb.search(line)
self.bb = self.pat_bb.search(line)
self.date = self.pat_date.search(line)
self.table = self.pat_table.search(line)
self.seat = self.pat_seat.search(line)
self.rake = self.pat_rake.search(line)
if __name__ == '__main__':
filepath = 'test.txt'
tab1 = parse_file(filepath)
print(tab1)
因此,当我在第二行中搜索模式等时,问题就开始了。 这是表信息(第二行)和瑞克信息(最后一行之一)。
我不知道如何遍历所有行。
如果我得到的值,如果模式不匹配,则将其保存到数据框,保存为None。 对于每一个扑克手,我都希望在数据框中像这样一行:http://prntscr.com/mk2y4t
答案 0 :(得分:0)
您需要将regex
与pandas
一起使用:
import re
import pandas as pd
data_pd = {'TypeOfRoom': [], 'HandId': [], 'TypeOfGame': [], 'SB': [], 'BB': [], 'Date': [], 'Hour': [], 'TimeZoneAbb': [], 'NoOfPlayers': [], 'Rake': []}
with open('file.txt', 'r') as f:
data = f.read()
result = re.findall('(\w+) Hand #(\d+): (.*) \(.(\d+\.\d+)\/.(\d+\.\d+).*(\d\d\d\d\/\d\d\/\d\d).*(\d+:\d+:\d+) (\w+)', data)
rakes = re.findall('Rake \$(.*)', data)
s = re.findall('Seat (\d).*chips', data)
s = [int(x) for x in s]
seats = []
length = 1
for i in range(len(s)-1):
if s[i+1] < s[i]:
seats.append(length)
length = 1
else:
length += 1
seats.append(length)
for r, rake, seat in zip(result, rakes, seats):
data_pd['TypeOfRoom'].append(r[0])
data_pd['HandId'].append(r[1])
data_pd['TypeOfGame'].append(r[2])
data_pd['SB'].append(r[3])
data_pd['BB'].append(r[4])
data_pd['Date'].append(r[5])
data_pd['Hour'].append(r[6])
data_pd['TimeZoneAbb'].append(r[7])
data_pd['NoOfPlayers'].append(seat)
data_pd['Rake'].append(rake)
df = pd.DataFrame(data_pd)
您将获得: