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

How to convert lower case file path to actual

变量file_path只使用小写字母:

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

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

/Users/UserName/Documents/My_Doc.txt

有趣的是,os.path.exists(file_path) returns True 让我相信我可以忽略字母大小写,因为 Python 和 OS 这个过程是运行 on 不区分大小写。 但是如果文件路径以 /Volumes/ 开头,字母大小写就变得非常重要(为什么会发生这种情况值得单独讨论)。

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

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

请注意,该过程可能不会产生唯一的答案。如果你同时拥有

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

你分不清是哪一个。

另请注意,如果中间级别包含多个匹配项,您必须继续向下 每个 路径寻找完整匹配项。例如,如果您有顶级 usersUsersUSERS,您将必须与所有三个一起工作以查看延续可能匹配的位置。

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

有点晚了,但可能仍然有用

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