我必须检查文件是否存在于Mac OS X中的特定路径。
目录中有一个名为foo.F90的文件。
但是当我if(os.path.exists(PATH_TO_foo.f90))
时,它返回true并且没有注意到f90是小写的,并且存在的文件是大写的F90。
我试过open(PATH_TO_foo.f90, "r")
,即使这不起作用
我如何解决这个问题?
答案 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()