python中区分大小写的路径比较

时间:2011-07-15 16:53:11

标签: python macos path comparison case-sensitive

我必须检查文件是否存在于Mac OS X中的特定路径。

目录中有一个名为foo.F90的文件。

但是当我if(os.path.exists(PATH_TO_foo.f90))时,它返回true并且没有注意到f90是小写的,并且存在的文件是大写的F90。

我试过open(PATH_TO_foo.f90, "r"),即使这不起作用

我如何解决这个问题?

6 个答案:

答案 0 :(得分:7)

正如一些评论者所指出的那样,Python并不真正关心不区分大小写的文件系统中的路径,因此路径比较或操作函数都不会真正满足您的需求。

但是,您可以使用os.listdir()间接测试它,它会为您提供实际案例的目录内容。鉴于此,您可以测试文件是否存在,例如:

'foo.f90' in os.listdir('PATH_TO_DIRECTORY')

答案 1 :(得分:0)

这与你的底层操作系统有关,而不是python。例如,在Windows中,文件系统不区分大小写,而在Linux中则区分大小写。因此,如果我在运行时运行相同的检查,在基于Linux的系统上,我将无法获得不区分大小写的匹配 -

>>> os.path.exists('F90')
True
>>> os.path.exists('f90')
False                      # on my linux based OS

如果你真的想要解决这个问题,你可以这样做 -

if 'f90' in os.listdir(os.path.dirname('PATH_TO_foo.f90')):
    # do whatever you want to do

答案 2 :(得分:0)

所以,既然你没有区分大小写的文件系统,那么

import os
if 'foo.F90' in os.listdir(PATH_TO_DIRECTORY):
    open(PATH_TO_DIRECTORY + 'foo.F90')

答案 3 :(得分:0)

如果路径在系统之间发生变化或您可以使用的东西:

import os, fnmatch

for file in os.listdir('.'):
    if fnmatch.fnmatch(file, 'foo.*'):
        print file

这将返回所有文件foo。

答案 4 :(得分:0)

我认为这应该适合你 -

    import os  

    def exists(path):  
        import win32api  
        if path.find('/') != -1:  
            msg = 'Invalid path for Windows %s'%path  
            raise Exception(msg)  
        path = path.rstrip(os.sep)  
        try:  
            fullpath = win32api.GetLongPathNameW(win32api.GetShortPathName(path))  
        except Exception, fault:  
            return False  
        if fullpath == path:  
            return True  
        else:
            return False

答案 5 :(得分:0)

使用 pathlib 为 Python 3.5+ 执行此操作的简单方法。适用于文件和目录:

from pathlib import Path

def exists_case_sensitive(path) -> bool:
    p = Path(path)
    if not p.exists():
        # If it already doesn't exist(), 
        # we can skip iterdir().
        return False
    return p in p.parent.iterdir()