python 3 os.remove具有相同名称的多种文件类型

时间:2018-10-21 18:22:30

标签: python python-3.x

所以我目前正在使用“搁置”来保存我正在开发的游戏的游戏数据,但是当我使用pyinstaller将此游戏打包到exe中时,它将创建3个不同的文件,它们的名称相同但文件不同类型,即使在创建文件时也没有指定文件类型。

def save_game(yn):
    if yn:
        file = shelve.open('savegame', 'n')
        file['map'] = map
        file['objects'] = objects
        file['player_index'] = objects.index(player)  # index of player in objects list
        file['stairs_index'] = objects.index(stairs)  # same for the stairs
        file['inventory'] = inventory
        file['game_msgs'] = game_msgs
        file['game_state'] = game_state
        file['dungeon_level'] = dungeon_level
        file.close()

这将创建没有文件类型的保存文件(效果很好!),但是以exe形式,当玩家死亡时会创建“ savegame.bak”,“ savegame.dir”和“ savegame.dat”。会先保存文件(如果没有保存文件)然后将其删除,因此您将无法访问已结束的游戏保存。

def player_death(player):
    # the game ended!
    global game_state

    ...

    game_state = 'dead'

    ...

    save_game(True)
    os.remove('savegame')

简而言之,我只需要知道如何使os.remove行摆脱savegame,无论它是1个文件还是3个不同文件,都具有不同的文件类型。

2 个答案:

答案 0 :(得分:0)

一种选择是使用pathlib

from pathlib import Path

for file in Path("/path/to/dir/with/saves").glob('savegame.*') :
    file.unlink()

答案 1 :(得分:0)

如果您可以使用通配符表示它,那么glob模块适合您。

from glob import iglob

for file in iglob("savegame.*"):
    os.remove(file)

注意:如果您知道只匹配少数几个文件,则可以安全地使用glob而不是iglob。如果您不知道要匹配多少个文件,通常应该使用iglob来避免在内存中留下庞大的列表。