python - os.path.isdir() 和 os.path.isfile() 都在脚本中返回 False,但在 Python 控制台中返回 True(就像他们应该的那样)
问题描述
我正在尝试使用for
模块os
来运行文件名列表,将itemtype
变量相应地更改为“文件”或“目录”,然后将其打印出来。当我尝试在 Python 控制台中执行此操作时,效果很好。但是,当在我的脚本中运行几乎相同的代码时,isdir()
和isfile()
函数都返回 false。
我在控制台中尝试这个:
>>> import os
>>> files = os.listdir()
>>> print(files)
['namebydate.py', 'order.bat', 'storebydate.py', 'test', '__pycache__']
>>> for i in files:
... itemtype=''
... if os.path.isdir(i):
... itemtype='DIRECTORY'
... elif os.path.isfile(i):
... itemtype='FILE'
...
... print('{itemtype}'.format(itemtype=itemtype))
...
FILE
FILE
FILE
DIRECTORY
DIRECTORY
>>>
它工作得很好。但是当我的脚本运行并达到它的等价物时:
for i in files:
itemtype = ''
if os.path.isdir(i):
itemtype = 'DIRECTORY'
elif os.path.isfile(i):
itemtype = 'FILE'
print('({current}/{total}) [{itemtype}] {name}'.format(
current=str(files.index(i)+1),
total=len(files),
itemtype=itemtype,
name=i))
函数返回 false,将itemtype
值保留为空字符串,输出变为:
Listing...
(1/4) [] testdir
(2/4) [] testdoc1.txt
(3/4) [] testdoc2.txt
(4/4) [] testdoc3.txt
在这种情况下,预期的结果应该是:
Listing...
(1/4) [DIRECTORY] testdir
(2/4) [FILE] testdoc1.txt
(3/4) [FILE] testdoc2.txt
(4/4) [FILE] testdoc3.txt
解决方案
isdir
并isfile
要求path
whilelistdir
返回name
。换句话说,要检查isdir
or isfile
,您应该在文件名之前附加路径。例如:
import os
dir = '/'
files = os.listdir(dir)
os.path.isdir(os.path.join(dir, files[0])
os.path.isfile(os.path.join(dir, files[0])
推荐阅读
- javascript - 将相同的主键发送到 2 个不同的数据库(Mongo,Psql)
- javascript - 如何在javascript对象中触发回调函数?
- laravel - 我不能将我的数据变量与 VueJS 和 Laravel 一起使用
- vue.js - 如何在 VueJS 的搜索栏中实现 API?
- java - 两栈递归解决方案的黑客等级博弈
- node.js - 如何使用 NODE.js 和 Express 将 MongoDB 数据发布到嵌套数组
- python - 如何在 Django 中自动为教师选择学生
- r - 如何从 R 中导入的维基百科表中删除引用?
- json - 如何用 json 存储协议缓冲区的“oneof”字段
- python - 将数据悬停在条形图上而不绘制文本 - plotly