7

在我的 windows7 64 位系统中,有一个名为msconfig.exefolder 的文件c:/windows/system32。是的,它必须存在。

但是当我使用os.listdir搜索文件夹c:/windows/system32 时,我没有得到该文件。这是测试代码,在t1.py

import os
files = os.listdir("c:/windows/system32")
for f in files:
    if f.lower() == "msconfig.exe":
        print(f)

运行 python 后t1.py,我什么也没得到。为什么文件丢失了?如何列出文件夹下的所有文件?

顺便说一句:我在 windows 7 64bit 下使用 python 3.3.0 32bit 版本

4

3 回答 3

9

我不认为这是特定于 Python 的问题。Windows在运行 64 位操作系统时使用 32 位进程做一些有趣的事情。在这种情况下,Windows 可能在运行 32 位 python 时将 C:\Windows\SysWOW64\ 的内容显示为 system32。SysWOW64 包含用于 32 位兼容层的各种 Windows 组件的 32 位版本。

以下是在 Windows 7 x64 系统上运行的;explorer.exe(在这种情况下是 64 位)肯定会为这些文件夹显示不同的内容,但是:

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import os
>>> 
>>> s32 = set(os.listdir('C:/Windows/System32'))
>>> s64 = set(os.listdir('C:/Windows/SysWOW64'))
>>> s32-s64 # the difference is an empty set!
set([])
于 2013-05-14T08:28:30.140 回答
6

在 64 位 Windows 上运行的 32 位进程具有sysnative可用于此问题的别名。

C:\Windows\System32>系统信息 | 找到“系统类型”
系统类型:基于 x64 的 PC

C:\Windows\System32>dir /b msconfig.exe
配置文件

C:\Windows\System32>python
Python 2.7.6(默认,2013 年 11 月 10 日,19:24:18)[MSC v.1500 32 位(英特尔)] 在 win32 上
输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。
>>> 导入操作系统
>>> os.listdir 中的“msconfig.exe”(r'c:\windows\system32')
错误的
>>> os.listdir 中的“msconfig.exe”(r'c:\windows\sysnative')
真的
>>>

请参阅File System Redirector (MSDN),其中说:

32 位应用程序可以通过将 %windir%\Sysnative 替换为 %windir%\System32 来访问本机系统目录。

于 2015-05-04T13:23:35.330 回答
0

尝试:C:\Windows\System32而不是c:/windows/system32

import os,sys

files = os.listdir('C:\Windows\System32')
for x in files:
    if x == ('msconfig.exe'):
        print(x)
于 2013-09-02T17:35:13.790 回答