【发布时间】:2019-07-06 05:04:20
【问题描述】:
我尝试从文本文件制作数据框。我正在使用我在 Internet 上找到的代码,但我没有卡住,我不知道如何继续前进。
PokerStars 手牌 #135139509095:德州扑克无限注 ($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 手牌 #135139512060:德州扑克无限注 ($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 在翻牌上折叠
Seat 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)
所以当我在第二行搜索模式时问题就开始了,依此类推。 这是表信息(第二行)和 rake 信息(最后一行)。
我不知道如何遍历所有行。
如果我得到值,如果模式不匹配,则将其保存到数据框中保存无。 对于每个扑克手,我都希望数据框中有这样的一行:http://prntscr.com/mk2y4t
【问题讨论】:
标签: python parsing text readlines