0

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

所以,我的问题是:

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

  2. 为什么不open区分大小写os.path


更新:感谢您的回答,但这不是 python 问题,所以我要结束这个问题。

4

3 回答 3

1

您可以尝试将 nocase 添加到 fstab 中的挂载中,如我在下面挖出的示例中所示,如果它尚不存在:

//server/acme/app    /home/joe/.wine/drive_c/App    cifs    guest,rw,iocharset=utf8,nocase,file_mode=0777,dir_mode=0777    0    0

找到一个解释 normcase 的链接

normcase 是一个有用的小功能,可以补偿认为 mahadeva.mp3 和 mahadeva.MP3 是同一个文件的不区分大小写的操作系统。例如,在 Windows 和 Mac OS 上,normcase 会将整个文件名转换为小写;在 UNIX 兼容的系统上,它将返回未更改的文件名。

这告诉您 open 在 Windows 文件系统上可能总是需要一个小写的文件名。

因此, os.path 不区分大小写的原因是它可能会在检查文件之前调用 os.path.normcase,而 open 不会。不过,这也可能只是一个错误。

于 2010-10-27T01:37:57.777 回答
0
def exists(path):
    try:
        open(path).close()
    except IOError:
        return False
    return True

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

于 2010-10-27T01:33:45.910 回答
0

要回答您的问题:

  1. 您可以stat在不尝试打开文件的情况下确定文件是否存在。
  2. Windows 共享文件系统不区分大小写。
于 2010-10-27T01:26:53.003 回答