os.listdir无法看到我的目录

时间:2013-10-04 18:00:21

标签: python windows windows-8.1

我正在开发一个在Windows 8.1计算机上安装802.1x证书的python脚本。此脚本在Windows 8和Windows XP上运行正常(尚未在其他计算机上尝试过)。

我已经解决了这个问题。它与清除文件夹

有关
"C:\Windows\system32\config\systemprofile\AppData\LocalLow\Microsoft\CryptURLCache\Content"

问题是我在此文件夹中使用模块os和命令listdir来删除其中的每个文件。但是,listdir错误,说文件夹不存在,确实存在。

问题似乎是os.listdir无法看到LocalLow文件夹。如果我制作一个双行剧本:

import os

os.listdir("C:\Windows\System32\config\systemprofile\AppData") 

它显示以下结果:

['Local', 'Roaming']

如您所见,缺少 LocalLow

我认为这可能是一个权限问题,但我很难弄清楚下一步可能是什么。我从命令行以管理员身份运行该过程,它根本看不到该文件夹​​。

提前致谢!

编辑:将字符串更改为r“C:\ Windows \ System32 \ config \ systemprofile \ AppData”,“C:\ Windows \ System32 \ config \ systemprofile \ AppData”或C:/ Windows / System32 / config / systemprofile / AppData“都产生相同的结果

编辑:此问题的另一个不寻常的问题:如果我在该位置手动创建一个新目录,我也无法通过os.listdir看到它。另外,我无法通过Notepad ++中的“另存为...”命令浏览到LocalLow或我的新文件夹

我开始认为这是Windows 8.1预览中的一个错误。

3 个答案:

答案 0 :(得分:5)

我最近遇到了这个问题。

我发现它是由Windows file system redirector

引起的

您可以查看以下python代码段

import ctypes

class disable_file_system_redirection:
    _disable = ctypes.windll.kernel32.Wow64DisableWow64FsRedirection
    _revert = ctypes.windll.kernel32.Wow64RevertWow64FsRedirection
    def __enter__(self):
        self.old_value = ctypes.c_long()
        self.success = self._disable(ctypes.byref(self.old_value))
    def __exit__(self, type, value, traceback):
        if self.success:
            self._revert(self.old_value)


#Example usage
import os

path = 'C:\\Windows\\System32\\config\\systemprofile\\AppData'

print os.listdir(path)
with disable_file_system_redirection():
    print os.listdir(path)
print os.listdir(path)

参考:http://code.activestate.com/recipes/578035-disable-file-system-redirector/

答案 1 :(得分:3)

您的路径中必须有转义序列。您应该使用原始字符串作为文件/目录路径:

# By putting the 'r' at the start, I make this string a raw string
# Raw strings do not process escape sequences
r"C:\path\to\file"

或者用另一种方式填写斜杠:

"C:/path/to/file"

或逃避斜杠:

# You probably won't want this method because it makes your paths huge
# I just listed it because it *does* work
"C:\\path\\to\\file"

答案 2 :(得分:1)

我很好奇你如何用这两行列出内容。您在代码中使用转义序列\ W,\ S,\ c,\ s,\ A.尝试像这样逃避反斜杠:

import os
os.listdir('C:\\Windows\\System32\\config\\systemprofile\\AppData')