在我的windows7 64位系统中,文件夹msconfig.exe
中有一个名为c:/windows/system32
的文件。是的,它必须存在。
但是当我使用os.listdir
搜索文件夹c:/windows/system3
2时,我没有收到该文件。以下是t1.py
中的测试代码:
import os
files = os.listdir("c:/windows/system32")
for f in files:
if f.lower() == "msconfig.exe":
print(f)
运行python t1.py
后,我什么都没得到。
为什么错过文件?如何列出文件夹下的所有文件?
BTW:我在windows 7 64bit下使用python 3.3.0 32位版本
答案 0 :(得分:8)
我不认为这是特定于Python的问题。在运行64位操作系统时,Windows使用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([])
答案 1 :(得分:4)
在64位Windows上运行的32位进程可以使用sysnative
别名来解决此问题。
C:\Windows\System32>systeminfo | find "System Type" System Type: x64-based PC C:\Windows\System32>dir /b msconfig.exe msconfig.exe C:\Windows\System32>python Python 2.7.6 (default, Nov 10 2013, 19:24:18) [MSC v.1500 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> 'msconfig.exe' in os.listdir(r'c:\windows\system32') False >>> 'msconfig.exe' in os.listdir(r'c:\windows\sysnative') True >>>
请参阅File System Redirector (MSDN),其中包含:
32位应用程序可以通过将%windir%\ Sysnative替换为%windir%\ System32来访问本机系统目录。
答案 2 :(得分: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)