【问题标题】:Best way to extract information from file从文件中提取信息的最佳方法
【发布时间】:2011-10-19 15:09:43
【问题描述】:

例如我的文件是:

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 : ]

代码完美运行。但我不认为这是一个好的代码必须有更好的方法来做到这一点。

【问题讨论】:

  • 这似乎是一项家庭作业,请向我们展示您的尝试,如果您遇到问题,我们很乐意为您提供帮助。

标签: python file extract


【解决方案1】:

试试类似的东西

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。

【讨论】:

  • 我打算写一些类似的东西。但是不要在最后一行调用 line.split() 两次,只需执行一次,例如:player_tag, player_name, player_action = line.split()。
  • 这也不完全清楚,但从问题中的示例来看,一个文件中可能有多个游戏。在这种情况下,需要在循环中检查和处理“游戏”行检测。
  • @ChrisPhillips 最后一行很好,当我写它时,我并没有想清楚:)。如果每个文件有多个游戏,则您必须将玩家数据与给定游戏相关联,我假设由于“工作代码”不这样做,我的也不需要。跨度>
  • 感谢您的帮助,代码现在好多了。每个文件我已经可以选择几个游戏了。
【解决方案2】:

您可以将csv.reader 与自定义方言一起使用,以获得已对许多细节进行排序的通用解决方案。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多