Я пытаюсь сделать Dataframe из текстового файла.Я использую код, который нашел в Интернете, но немного застрял и не знаю, как двигаться дальше.
PokerStars Hand # 135139509095: Холдем без ограничений ($ 0,25 / $ 0,50 USD)- 2015/05/13 2:26:41 ET
Стол 'Castafiore II' 6-max. Сиденье № 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
Board [Jd 9c Tc 4s]
Место 5: DavidRandis собрал ($ 3,58)
Покер PokerStars # 135139512060: Безлимитный холдем ($ 0,25 / $ 0,50 USD) - 2015/05/13 2:26:52 ET
Стол «Артек 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
Board [7h Td Jc]
Место 1: Johnii141 (большой блайнд) фолд до флопа
Место 2: MASSOS17 собрано ($ 2,63)
Место 4: jayceee16, сложенное на флопе
Место 5: Mastiksou855 (кнопка), сложенное до флопа (не ставить)
Место 6: malabar357 (маленький блайнд), сложенное перед флопом
Это не полная покерная комбинация.Просто вставьте сюда две покерные руки в качестве примера, чтобы показать вам, как это выглядит.Пример с полными пятью покерными руками выложен здесь: 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