变量file_path
仅使用小写字符:
file_path = '/users/username/documents/my_doc.txt'
而实际文件路径包含:大写和小写字符:
/Users/UserName/Documents/My_Doc.txt
有趣的是,os.path.exists(file_path)
返回True
让我相信我可以忽略字母大小写,因为Python和运行该过程的操作系统并不具有案例敏感性。
但如果文件路径以/Volumes/
开头,那么字母大小写非常重要(为什么它会发生,值得单独讨论)。
我们如何将全小写文件路径转换为正确显示大写和小写大小写的实际文件路径?
答案 0 :(得分:2)
你不是,因为它不是确定性的映射。相反,您在每个级别搜索小写版本与您拥有的名称匹配的名称。
请注意,此过程可能无法产生唯一答案。如果你有两个
/Users/UserName/Documents/My_Doc.txt
/Users/username/Documents/MY_DOC.txt
你无法分辨出那个意图。
另请注意,如果中间级别包含多个匹配项,则必须继续向下每个路径以查找完整匹配项。例如,如果您有顶级users
,Users
和USERS
,那么您必须使用这三个来查看续点可能匹配的位置。
如果文件系统足够小,你可以简单地生成每个文件名并全部检查,那就是要走的路:简单,易于维护,易于理解。
答案 1 :(得分:2)
有点晚了,但可能仍然有用
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))