我试图从文本文件中生成Dataframe。我正在使用我在互联网上找到的代码,但是我被困住了,我不知道如何前进。
PokerStars Hand #135139509095:不限(0.25美元/0.50美元)- 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:褶皱 蒂戈西德尼:从1美元到1.5美元 parisvii1986:褶皱 Johnii141:褶皱 DavidRandis:拨打1美元 * FLOP * Jd 9c Tc *转* Jd 9c Tc *摘要* 大麻3.75美元Rake 0.17美元 Jd 9c Tc 4s板 座位5:收取DavidRandis (3.58美元) PokerStars Hand #135139512060:不限(0.25美元/0.50美元)- 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美元- Rake 0.12美元 板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)所以,当我在第二行搜索模式时,问题就开始了,等等。这是表信息(第二行)和rake信息(最后一行之一)。
我不知道如何跨越所有的线。
如果得到值,将其保存到dataframe,如果模式不匹配,则保存None。对于每一个角手,我想要一行数据,如下所示:http://prntscr.com/mk2y4t
发布于 2019-02-13 09:44:25
您需要将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)你会得到:

https://stackoverflow.com/questions/54651971
复制相似问题