Лучший способ извлечь информацию из файла - PullRequest
0 голосов
/ 19 октября 2011

Например, мой файл:

Game #51236595 Tourney #123698521 Hand #9865653215
player luisgustavo call
player otherplayer fold
player otherother  check

Я хочу получить информацию наилучшим образом.Помните, что все файлы в этом формате.Какие изменения являются числа и игроков

РЕДАКТИРОВАТЬ: Хорошо, но это не домашнее задание.Я делал это несколько раз, но я не думаю, что это лучший способ.

with open(".myfile", "r") as myfile:
    for line in myfile:
        if "Game" in line:
            game_number = line[line.find('#')+1 : line.find("Tourney")-2]
            tourney_number = line[line.find('Tourney #')+9 : line.find("Hand")-2]
            hand_number = line[line.find('Hand #')+6 : ]
        elif "player" in line:
            player_name = line[line.find(' ')+1 : line.rfind(' ')]
            player_action = line[line.rfind(' ')+1 : ]

Код работает отлично.Но я не думаю, что хороший код должен иметь лучший способ сделать это.

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

Попробуйте что-то вроде

with open('.myfile', 'r') as myfile:
    header = myfile.readline().split()
    game_number, tourney_number, hand_number = header[1], header[3], header[5]
    for line in myfile:
        player_name, player_action = line.split()[1:]

Это использует split() [ документы ] и является гораздо более питоническим.

1 голос
/ 19 октября 2011

Вы можете использовать csv.reader с пользовательским диалектом для общего решения с большим количеством уже отсортированных деталей.

0 голосов
/ 19 октября 2011

Опираясь на ответ, данный @brc выше:

with open(".myfile", "r") as myfile:
    for line in myfile:
        parts = line.split()

        if parts[0] == 'Game':
            game_tag, game_number, tourney_tag, tourney_number, hand_tag, hand_number = parts
            continue

        player_tag, player_name, player_action = parts

Это явно извлекает нужные вам кусочки с минимумом накладных расходов.Конечно, вам также нужно что-то делать со значениями.Кроме того, я предполагаю, что в файле может быть несколько «игровых» строк.Если это не так, вы можете просто проверить это в первой строке.

...