从文件中提取信息的最佳方法

时间:2011-10-19 15:09:44

标签: python file extract

例如我的文件是:

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 个答案:

答案 0 :(得分:2)

尝试类似

的内容
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() [docs] 而且更加pythonic。

答案 1 :(得分:1)

您可以将csv.reader与自定义方言一起用于一般解决方案,其中包含许多已经排序的详细信息。

答案 2 :(得分:0)

基于@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

这清楚地以最小的开销提取您需要的部分。当然,您还需要对值进行实际操作。另外,我假设文件中可以有多个“游戏”行。如果不是这样,你可以在第一行检查它。