无法判断samba共享上是否存在文件

时间:2010-10-27 01:19:19

标签: python case-insensitive samba

我知道文件名是file001.txtFILE001.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

所以,我的问题是:

  1. 有没有办法确定文件名是什么而不打开文件(或列出它所在的目录)?

  2. open不是时,为什么os.path区分大小写?


  3. 更新:感谢您的回答,但this isn't a python problem所以我正在结束这个问题。

3 个答案:

答案 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)

回答你的问题:

  1. 您可以使用stat确定文件是否存在而不尝试打开文件。
  2. Windows共享文件系统不区分大小写。

答案 2 :(得分:0)

def exists(path):
    try:
        open(path).close()
    except IOError:
        return False
    return True

除了权限问题,为什么不打开文件?