当文件存在时,python os.path.exists报告为False

时间:2015-04-09 14:42:10

标签: python macos os.path

您有一个应用程序,有时会报告文件不存在,即使它确实存在,我使用os.path.exists并且该文件位于已安装的网络共享上。我在OSX Yosemite,python 2.7.9上,我有权访问该文件。这是奇怪的事情。下面的第一个命令报告False,然后我再次运行它,但是将文件名中的一个字符更改为小写(TestVendorid_VerifyLog.txt),再次运行它并报告True!然后再次使用大写字母再次运行它(TestVendorId_VerifyLog.txt)并报告True!到底是怎么回事?这是非常一致的,因为它在大多数时间返回True,但随后突然返回False,然后我可以重复下面的练习。

>>> import os
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt")
False
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorid_VerifyLog.txt")
True
>>> os.path.exists("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt")
True
>>> 

更新1:

报告True时,我运行了这个:

>>> os.stat("/Volumes/platform-deliveries-103_1/TEST/TestVendorId.itmsp/TestVendorId_VerifyLog.txt")
posix.stat_result(st_mode=33216, st_ino=5351561660274954203, st_dev=771751953L, st_nlink=1, st_uid=504, st_gid=20, st_size=38552, st_atime=1428492003, st_mtime=1428589374, st_ctime=1428589374)

更新2:

好的,我现在可以重复这个,它绝对是一个缓存的东西。我在我的本地Mac上删除文件TestVendorId_VerifyLog.txt,然后在另一个工作站上重新创建该文件(此文件在网络共享上)然后我在Mac上获取False。如果我在os.path.exists命令的文件名中更改了一个字母,它似乎使os.path.exists更难以查找该文件并找到它。所以我需要的是在运行命令之前在python中使用'Refresh Finder'命令。

2 个答案:

答案 0 :(得分:1)

os.path.exists在尝试统计文件时发生False时,

OSError会返回os.stat(filename)。处理异常并因此屏蔽。

您应该尝试运行{{1}},看看是否能提供有关问题的更多信息。

答案 1 :(得分:0)

确保没有\n或任何其他隐形'文件名中任意位置的字符。

编辑:经过几个小时挖掘我自己的类似问题后,我意识到问题是我的目标文件所在目录的错误权限。请确保您的目录中ls -l检查是否存在您正在使用的用户具有适当的权限。