2014-03-13 78 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() 
相關問題