2014-03-13 53 views
0

我开始写一个“解析”函数来读取我的引擎/游戏的地图,并且我使用Tiled software来创建地图并将它们导出到文本文件。无论如何,我决定让文本更容易让玩家定制它们,但我很好奇。我试图将所有.txt文件扩展名替换为“.sk”之类的新扩展名。下面是我试图实现这个:如何替换文件夹中的所有文件扩展名? (Python)

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

问题是:我总是得到“地图文件被其他程序使用”。我希望地图文件夹中的所有.txt文件具有的名称替换为.sk(或其他)文件。

回答

2

如果更改

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

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

你会看到这样的事情:

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

由于您的映射文件位于Maps目录中,因此您正试图将其重命名,就像它在当前目录中一样。

这将做的工作:

进口操作系统,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用户(不知道,但好像真的)。

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"),如果你的文件扩展名不隐藏。

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() 
相关问题