os.path.isfile(fullpath)和os.path.isdir(fullpath)都返回false!为什么呢?

时间:2017-03-11 19:41:17

标签: python windows file-permissions

遍历下面提到的目录和所有子目录(Windows 8.1)以完整路径打印所有文件会返回错误(无效目录)。 在python解释器中测试时,我得到以下输出:

os.path.isfile("C:\\Miele_Service\\Miele Offline-ETD\\DATA_data.mdf")

给出:

False

此外:

os.path.isdir("C:\\Miele_Service\\Miele Offline-ETD\\DATA_data.mdf")

给出:

False

在我看来,权限存在问题,因为* .mdf是一个sql数据库文件。

我需要做些什么来通过代码获得必要的权限才能确认它确实是一个文件并将其打印出来?

编辑:

在命令提示符中使用icacls函数检查的结果:

用于访问被拒绝文件的目录:

> icacls "C:\Miele_Service\Miele Offline-ETD"
C:\Miele_Service\Miele Offline-ETD 

    Everyone:(OI)(CI)(F)
    BUILTIN\Administrators:(I)(OI)(CI)(F)
    NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
    BUILTIN\Users:(I)(OI)(CI)(RX)
    NT AUTHORITY\Authenticated Users:(I)(M)
    NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)

Successfully processed 1 files; Failed processing 0 files

对于我获得访问被拒绝的文件错误(我必须使用与开始帖子不同的文件,因为我手动更改了原始文件的权限以确认它是读访问权限问题):

> icacls "C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf"
C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf: Access is denied.
Successfully processed 0 files; Failed processing 1 files

我应该使用什么模块在Python中自动修改文件和目录的权限?

编辑2:

检查提升的命令提示符:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Windows\system32>icacls "C:\Miele_Service\Miele Offline-ETD"
C:\Miele_Service\Miele Offline-ETD 

    Everyone:(OI)(CI)(F)
    BUILTIN\Administrators:(I)(OI)(CI)(F)
    NT AUTHORITY\SYSTEM:(I)(OI)(CI)(F)
    BUILTIN\Users:(I)(OI)(CI)(RX)
    NT AUTHORITY\Authenticated Users:(I)(M)
    NT AUTHORITY\Authenticated Users:(I)(OI)(CI)(IO)(M)

Successfully processed 1 files; Failed processing 0 files

C:\Windows\system32>icacls "C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf"
C:\Miele_Service\Miele Offline-ETD\DATA_log.ldf 

    TKlucziowski\SQLServerMSSQLUser$TKlucziowski$MIELE_ETD:(F)
    OWNER RIGHTS:(F)
    BUILTIN\Administrators:(F)

Successfully processed 1 files; Failed processing 0 files

看来,凭借管理员权限,icacls能够成功访问该文件......

因此,请指出我在Python中启用权限更改的模块。我是新手,但据我所知,最好的方法是暂时删除限制(并以某种方式备份?)并在访问文件后恢复以前的权限。

THX。

2 个答案:

答案 0 :(得分:0)

您的路径错误,Python无法找到您的文件。

在路径中的空格之前添加\以逃避它。

无论如何,这不应该是许可问题。

答案 1 :(得分:0)

尝试

os.path.isdir("C:\\Miele_Service\\Miele\ Offline-ETD\\DATA_data.mdf")

你的目录名称中有空格字符

大多数解释器将空格字符视为结尾,因此,在考虑的情况下,os.path.isdir查找C:\Miele_Service\Miele目录而不是C:\Miele_Service\Miele Offline-ETD,无法找到它,返回{ {1}}。 False用于将空格字符包含在名称/路径中(视为符号,没有特殊含义)