为什么isfile没有显示所有文件

时间:2015-12-29 12:29:18

标签: python python-2.7 path

我有这个简单的Python代码:

import os
print [f for f in os.listdir('C:\Users\g514549\Desktop\MyFolder') if os.path.isfile(f)]

现在,如果我打开目录,我会得到以下所有文件:

Snapshot of the directory content

但是当我运行python脚本时,我得到一个空字符串,表示所有文件都返回False

但是当我改变这样的目录时:

import os
print [f for f in os.listdir('C:\Users\g514549\Desktop\C++') if os.path.isfile(f)]

它正确显示所有文件。 第二个文件夹内容如下。

2nd Directory Link

发生了什么事? 我已经尝试删除第一个目录中的所有文件,并使用不同的文本编辑器和不同的编码创建一些虚拟文件,但没有任何工作。

注意 我只能在第一个文件夹中的任何exe文件中获得

注2 这不是所报告问题的重复。这个是不同的

2 个答案:

答案 0 :(得分:2)

原因是'C:\Users\g514549\Desktop\C++'是您当前的路径。

/tmp中没有任何内容:

>>> len([f for f in os.listdir('/tmp') if os.path.isfile(f)])
0

但是当我创建完整路径时:

>>> len([f for f in os.listdir('/tmp') if os.path.isfile(os.path.join('/tmp', f))])
2

更改为/tmp

cd /tmp

让它在没有完整路径的情况下工作:

>>> len([f for f in os.listdir('/tmp') if os.path.isfile(f)])
2

要进行保存,请始终创建完整路径。您永远不知道当前工作目录是否因为您无法控制的原因而发生变化。

注意:在Windows上,在复制粘贴路径时始终使用原始字符串:

r'C:\Users\g514549\Desktop\C++'  

以避免\n\t或其他格式字符所造成的影响。

答案 1 :(得分:0)

您可以使用os.walk来显示所有文件。

import os
print [f for (dir, subdirs, fs) in os.walk('.') for f in fs]