如何替换文件夹内所有文件扩展名?(Python)
我开始写一个“解析”函数,用来读取我游戏里的地图。我使用的是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用户(虽然不太确定,但感觉是这样)。