为什么isfile不显示所有文件

2024-07-03 06:06:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的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文件,我只能得到True

注2这不可能重复报告的问题。这个不同


Tags: 文件pathinimport目录文件夹forif
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或其他格式化字符造成的影响。你知道吗

可以使用os.walk显示所有文件。你知道吗

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

相关问题 更多 >