我知道文件名是file001.txt
或FILE001.TXT
,但我不知道哪个。该文件位于我通过samba挂载点访问的Windows计算机上。
os.path
中的函数似乎表现得好像不区分大小写,但open
函数似乎区分大小写:
>>> from os.path import exists, isfile
>>> exists('FILE001.TXT')
True
>>> isfile('FILE001.TXT')
True
>>> open('FILE001.TXT')
Traceback (most recent call last):
File "<console>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'FILE001.TXT'
>>> open('file001.txt') # no problem
所以,我的问题是:
有没有办法确定文件名是什么而不打开文件(或列出它所在的目录)?
当open
不是时,为什么os.path
区分大小写?
更新:感谢您的回答,但this isn't a python problem所以我正在结束这个问题。
答案 0 :(得分:1)
您可以尝试将nocase添加到fstab中的mount中,就像我在下面挖出的示例一样,如果它还没有在那里:
//server/acme/app /home/joe/.wine/drive_c/App cifs guest,rw,iocharset=utf8,nocase,file_mode=0777,dir_mode=0777 0 0
Found a link explaining normcase
normcase是一个有用的小功能 补偿不区分大小写 认为这样的操作系统 mahadeva.mp3和mahadeva.MP3是 同一个文件。例如,在Windows上 和Mac OS,normcase将转换 整个文件名为小写;上 与UNIX兼容的系统,它会 返回文件名不变。
这告诉你open可能总是期望Windows文件系统上的小写文件名。
因此,os.path不区分大小写的原因是它在检查文件之前可能会调用os.path.normcase,而open则不会。虽然,这也可能只是一个错误。
答案 1 :(得分:0)
回答你的问题:
stat
确定文件是否存在而不尝试打开文件。答案 2 :(得分:0)
def exists(path):
try:
open(path).close()
except IOError:
return False
return True
除了权限问题,为什么不打开文件?