代码之家  ›  专栏  ›  技术社区  ›  alphanumeric

如何将小写文件路径转换为实际路径

  •  0
  • alphanumeric  · 技术社区  · 8 年前

    变量 file_path 仅使用小写字符:

    file_path = '/users/username/documents/my_doc.txt'

    而实际文件路径同时包含:大写和小写字符:

    /Users/UserName/Documents/My_Doc.txt

    有趣的是 os.path.exists(file_path) 退货 True 让我相信我可以忽略字母大小写,因为Python和进程运行的操作系统不区分大小写。 但是,如果文件路径以 /Volumes/ (发生的原因值得单独讨论)。

    我们如何将所有小写文件路径转换为正确显示大写和小写的实际文件路径?

    2 回复  |  直到 8 年前
        1
  •  2
  •   Prune    8 年前

    你没有,因为它不是确定性映射。相反,您可以在每个级别上搜索其小写版本与您拥有的名称匹配的名称。

    请注意,该过程可能不会产生唯一的答案。如果你两者都有

    /Users/UserName/Documents/My_Doc.txt
    /Users/username/Documents/MY_DOC.txt
    

    你不知道是哪一个。

    还要注意,如果中间级别包含多个匹配项,则必须继续向下 每个 查找完全匹配的路径。例如,如果您有顶级 users , Users USERS ,您必须与这三个一起工作,以查看连续体可能匹配的位置。

    如果文件系统足够小,您可以简单地生成每个文件名并检查所有文件名,那么这就是方法:简单、易于维护、易于遵循。

        2
  •  2
  •   Alter    8 年前

    有点晚了,但可能还是有用的

    import os
    
    def _case(folder, findme):
        items = os.listdir(folder)
        for item in items:
            if item.lower() == findme:
                output = os.path.join(folder, item)
                break
        return item
    
    def casify_fullpath(file_path):
        output = r'C:\\'
        for part in file_path.split('\\')[:-1]:
            if not part: continue #skip blanks
            output = os.path.join(output, _case(output, part))
    
        return output
    

    要运行它,只需插入小写文件路径

    file_path = r'C:\Users\whoami\Documents\mY_dOc'
    file_path = file_path.lower()
    print("input", file_path)
    print("output", casify_fullpath(file_path))