我需要有人帮我启动一个程序。我每周都会在网上玩几场扑克比赛。事实证明,我使用的网站记录手的历史,并将它们保存到我的硬盘驱动器作为.txt文件。不幸的是,数据的格式有点粗糙。我想要创建一个程序,以每一只手,并告诉我多少我赢或输。我从下面的一只手上粘贴了一个样本,我想从每只手中提取以下信息。
下面是.txt文件的外观。注意这是一只手。在实际的.txt文件中,这只手将被几十个或数百个其他手跟随。开头总是用“游戏开始”来表示,最后一行总是表示“游戏结束”。
Game started at: 2018/1/9 10:14:10
Game ID: 1094127759 250/500 $5,000 GTD, Table 4 (Hold'em)
Seat 7 is the button
Seat 1: Player1 (9650).
Seat 2: Player2 (19433).
Seat 3: Hero (17595).
Seat 4: Player4 (8900).
Seat 5: Player5 (12670).
Seat 6: Player6 (11187).
Seat 7: Player7 (11300).
Seat 8: Player8 (17603).
Player Player8 ante (50)
Player Player1 ante (50)
Player Player2 ante (50)
Player Hero ante (50)
Player Player4 ante (50)
Player Player5 ante (50)
Player Player6 ante (50)
Player Player7 ante (50)
Player Player8 has small blind (250)
Player Player1 has big blind (500)
Player Player8 received a card.
Player Player8 received a card.
Player Player1 received a card.
Player Player1 received a card.
Player Player2 received a card.
Player Player2 received a card.
Player Hero received card: [10c]
Player Hero received card: [7h]
Player Player4 received a card.
Player Player4 received a card.
Player Player5 received a card.
Player Player5 received a card.
Player Player6 received a card.
Player Player6 received a card.
Player Player7 received a card.
Player Player7 received a card.
Player Player2 folds
Player Hero folds
Player Player4 raises (1000)
Player Player5 folds
Player Player6 folds
Player Player7 folds
Player Player8 folds
Player Player1 folds
Uncalled bet (500) returned to Player4
Player Player4 mucks cards
------ Summary ------
Pot: 1650
Player Player1 does not show cards.Bets: 550. Collects: 0. Loses: 550.
Player Player2 does not show cards.Bets: 50. Collects: 0. Loses: 50.
Player Hero does not show cards.Bets: 50. Collects: 0. Loses: 50.
*Player Player4 mucks (does not show cards). Bets: 550. Collects: 1650. Wins: 1100.
Player Player5 does not show cards.Bets: 50. Collects: 0. Loses: 50.
Player Player6 does not show cards.Bets: 50. Collects: 0. Loses: 50.
Player Player7 does not show cards.Bets: 50. Collects: 0. Loses: 50.
Player Player8 does not show cards.Bets: 300. Collects: 0. Loses: 300.
Game ended at: 2018/1/9 10:14:52任何帮助都是非常感谢的。甚至只是一些关于我如何去做这件事或者我应该学到什么东西的一些想法。在我看来,输出应该如下所示:
HandNumber = 000001
BigBlind = 500
Ante = 50
Players = 8
StackSize = 17595
Hand = 10c7h
Position = 6 # small blind = 1; add 5 since I'm 5 positions removed
Profit = -50我的经验水平:--我已经学习了大约6个月的开发、数据科学和SQL的在线课程。我对课程有些熟悉,但对自己的课程却没有太多的经验。我设计了一些程序来帮助使用正则表达式从财务报表中提取数据。
发布于 2018-01-10 10:33:31
这将是最容易解决的使用正则表达式分裂不同的游戏,然后更多的正则表达式提取信息。我会上一堂课来保存所有这些信息。然后可以使用db或json存储这些信息。
def split_file(file_handle):
pat_str = '''\
^Game started at: (?P<game_start>.*?)
(?P<game>.*?)
^------ Summary ------
(?P<summary>.*)
^Game ended at: (?P<game_end>.*)$\
'''
pat = re.compile(pat_str, flags=re.MULTILINE|re.DOTALL)
text = file_handle.read()
for game in pat.finditer(text):
yield game
class Pokergame:
def __init__(self, game_info, playername = 'Hero'):
self.game_start = datetime.datetime.strptime(game_info['game_start'], "%Y/%m/%d %H:%M:%S")
self.game_end = datetime.datetime.strptime(game_info['game_end'], "%Y/%m/%d %H:%M:%S")
self.game_info = _parse_game(game_info['game'], playername)
self.summary = _parse_summary(game_info['summary'], playername)
def _parse_game(game_str, playername):
pattern_seat = f'Seat (\d+): {playername} \((\d+)\).'
seat_match = re.search(pattern=pattern_seat, string=game_str)
if seat_match:
seat, stack = seat_match.groups()
pattern_cards = f'Player {playername} received card: \[(?P<card>\w+)\]'
cards = tuple(i['card'] for i in re.finditer(pattern_cards, game_str))
result = {
'seat': seat,
'stack': stack,
'cards': cards,
'text': game_str,
}
return result
def _parse_summary(summary_str, playername):
return summary_str
games = []
with StringIO(hand_text) as file_handle:
for game_info in split_file(file_handle):
games.append(Pokergame(game_info))我使用StringIO来模拟open(file)。您将不得不充实__init__和_parse_...,但这将使您走上正确的轨道。
如果您有多个文件,可以使用itertools.chain连接游戏。
games.game_info
{'cards': ('10c', '7h'),
'seat': '3',
'stack': '17595',
'text': "Game ID: 1094127759 250/500 $5,000 GTD, ...\nPlayer Player4 mucks cards"}https://stackoverflow.com/questions/48182881
复制相似问题