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

Python 从文件中提取信息的最佳方法,python,file,extract,Python,File,Extract,例如,我的文件是: Game #51236595 Tourney #123698521 Hand #9865653215 player luisgustavo call player otherplayer fold player otherother check 我想以最好的方式得到信息。 请记住,所有文件都是这种格式。人数和球员有什么变化 编辑:好的,但这不是家庭作业。 我做过几次,但我认为这不是最好的方法 with open(".myfile", "r") as myfile:

例如,我的文件是:

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

代码工作得很好。但我不认为这是一个好的代码,必须有更好的方法来做到这一点。

您可以使用
csv.reader
和自定义方言来获得一个已经排序了很多细节的通用解决方案。

您可以使用
csv.reader
和自定义方言来获得一个已经排序了很多细节的通用解决方案。

试试看像

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()

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()

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

这将以最小的开销清晰地提取出您需要的片段。当然,您还需要实际处理这些值。另外,我假设一个文件中可以有多个“游戏”行。如果不是这样,你可以在第一行检查它。

根据上面@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

这将以最小的开销清晰地提取出您需要的片段。当然,您还需要实际处理这些值。另外,我假设一个文件中可以有多个“游戏”行。如果这不是真的,你可以在第一行检查。

这似乎是一个家庭作业,请告诉我们你尝试了什么,如果你有问题,我们会很乐意帮助你。这似乎是一个家庭作业,请告诉我们你尝试了什么,如果你有问题,我们会很乐意帮助你。我打算写类似的东西。但是,不要在最后一行调用line.split(),而是只调用一次,例如:
player\u标记、player\u名称、player\u动作
=line.split()。这也不完全清楚,但从问题中的示例来看,一个文件中可能有多个游戏。在这种情况下,需要在循环中检查和处理“游戏”行检测。@ChrisPhillips在最后一行上的调用很好,当我写它时,我没有想清楚:)。如果每个文件中有多个游戏,那么您必须将玩家数据与给定的游戏相关联,我假设,由于“工作代码”不能做到这一点,我的也不需要。感谢您的帮助,代码现在好多了。我已经可以在每个文件中找到几个游戏了。我打算写一些类似的东西。但是,不要在最后一行调用line.split(),而是只调用一次,例如:
player\u标记、player\u名称、player\u动作
=line.split()。这也不完全清楚,但从问题中的示例来看,一个文件中可能有多个游戏。在这种情况下,需要在循环中检查和处理“游戏”行检测。@ChrisPhillips在最后一行上的调用很好,当我写它时,我没有想清楚:)。如果每个文件中有多个游戏,那么您必须将玩家数据与给定的游戏相关联,我假设,由于“工作代码”不能做到这一点,我的也不需要。感谢您的帮助,代码现在好多了。我已经可以拿起每个文件的几个游戏。