如何替换文件夹内所有文件扩展名?(Python)

0 投票
3 回答
1466 浏览
提问于 2025-04-17 22:09

我开始写一个“解析”函数,用来读取我游戏里的地图。我使用的是Tiled软件来创建地图,并把它们导出成文本文件。总之,我决定把这些文件保留为文本格式,这样玩家可以更方便地自定义它们。不过,我有点好奇,想把所有的.txt文件后缀改成新的后缀,比如“.sk”或者其他的。以下是我尝试实现这个的代码:

import os, sys

def parse(map, path="Maps"):

    for f in os.listdir(path):
        try:
            print f
            os.rename(f,f.replace("txt","sk"))
        except WindowsError:
            print "Map file in use by another program."
            sys.exit()
    fullPath = os.path.join(path, map)
    m = open(fullPath, 'r+')
    return m.read()

print parse("map1.sk")

问题是:我总是收到“地图文件正在被其他程序使用。”的提示。我想把Maps文件夹里的所有.txt文件的文件名改成.sk(或者其他的后缀)。

3 个回答

1

你需要把你的工作目录切换到那个路径,这样才能更改文件名。

试试这个:

def parse(map, path="Maps"):
    new_path = os.path.join(os.getcwd(), path)
    os.chdir(new_path)
    for f in os.listdir(new_path):
        try:
            print f
            os.rename(f,f.replace("txt","sk"))
        except WindowsError:
            print "Map file in use by another program."
            sys.exit()

如果你的文件扩展名没有隐藏的话,你也可以使用 str.endswith(".txt") 来检查文件是否是以“.txt”结尾的。

1

你可以试试这个:

def parse(map, path="Maps"):
    for f in os.listdir(path):
        try:
            print(f)
            os.rename(
                path + f,
                os.path.splitext(f)[0] + ".sk"
                )
            )
        except OSError:
            print("Map file in use by another program.")
            sys.exit()
2

如果你把

    ...
    except WindowsError:
        print "Map file in use by another program."
        sys.exit()
    ...

换成

    ...
    except OSError as e:
        print(e)
        sys.exit()
    ...

你会看到类似这样的错误信息:

[Errno 2] 没有这样的文件或目录: 'map1.sk'

这是因为你的地图文件在 Maps 文件夹里,而你试图把它重命名成当前目录下的文件。

这样做就能解决问题:

import os, sys

def parse(path="Maps/"):

    for f in os.listdir(path):
        try:
        os.rename(path+f,path+f.replace("txt","sk"))
        except OSError as e:
            print(e)
            sys.exit()

parse()

我用了 OSError 而不是 WindowsError,因为 WindowsError 只适用于Windows用户(虽然不太确定,但感觉是这样)。

撰写回答