【发布时间】:2019-05-04 15:51:07
【问题描述】:
我正在尝试使用for 和os 模块来运行文件名列表,将itemtype 变量相应地更改为“FILE”或“DIRECTORY”,然后将其打印出来。当我尝试在 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
【问题讨论】:
-
我运行了你的代码,运行良好。