【问题标题】:How to replace all the file extensions in a folder? (Python)如何替换文件夹中的所有文件扩展名? (Python)
【发布时间】:2014-03-13 15:22:37
【问题描述】:

我开始编写一个“解析”函数来读取我的引擎/游戏的地图,我正在使用Tiled software 创建地图并将它们导出到文本文件。无论如何,我决定将它们保留为文本,以便玩家更容易自定义它们,但我很好奇。我试图将所有 .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(或其他)文件。

【问题讨论】:

    标签: python file directory filenames


    【解决方案1】:

    如果你改变了

        ...
        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 目录中,而您正试图重命名它,就像它在当前目录中一样。

    这样就可以了:

    导入操作系统,系统

    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 用户(不确定,但似乎是真的)。​​

    【讨论】:

      【解决方案2】:

      您需要将工作目录更改为该路径才能更改文件名。

      试试这个:

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

      【讨论】:

        【解决方案3】:

        你可以试试这个:

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

        【讨论】:

          猜你喜欢
          • 2019-07-07
          • 1970-01-01
          • 2020-01-07
          • 1970-01-01
          • 2011-04-02
          • 1970-01-01
          • 2014-11-02
          • 2021-10-08
          • 1970-01-01
          相关资源
          最近更新 更多