Python中的区分大小写路径比较
我需要检查在Mac OS X的某个路径下是否有一个文件。
在这个目录里有一个叫做foo.F90的文件。
但是当我执行if(os.path.exists(PATH_TO_foo.f90))
时,它返回的是“真”,也就是说它没有注意到f90是小写的,而实际上存在的文件是大写的F90。
我还试过open(PATH_TO_foo.f90, "r")
,结果也不行。
我该怎么解决这个问题呢?
7 个回答
1
对于还在为这个问题苦恼的朋友们,下面这段代码对我有效。
from pathlib import Path
def path_exists_case_sensitive(p: Path) -> bool:
"""Check if path exists, enforce case sensitivity.
Arguments:
p: Path to check
Returns:
Boolean indicating if the path exists or not
"""
# If it doesn't exist initially, return False
if not p.exists():
return False
# Else loop over the path, checking each consecutive folder for
# case sensitivity
while True:
# At root, p == p.parent --> break loop and return True
if p == p.parent:
return True
# If string representation of path is not in parent directory, return False
if str(p) not in map(str, p.parent.iterdir()):
return False
p = p.parent
1
这跟你的操作系统有关,而不是跟Python有关。比如,在Windows系统中,文件名不区分大小写,也就是说“file.txt”和“FILE.TXT”被认为是同一个文件。而在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
13
正如一些评论者提到的,Python在不区分大小写的文件系统中,对路径的大小写并不太在意,所以那些用来比较或处理路径的函数可能无法满足你的需求。
不过,你可以通过os.listdir()
间接测试一下,这个函数会返回目录中实际的文件名,包括它们的大小写。基于这个,你可以用下面的方式来检查文件是否存在:
'foo.f90' in os.listdir('PATH_TO_DIRECTORY')