os.path.isdir () и os.path.isfile () оба возвращают False в скрипте, но возвращают True (как они должны) в консоли Python - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь использовать 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

1 Ответ

1 голос
/ 04 мая 2019

isdir и isfile требует path, а listdir возвращает name. Другими словами, чтобы проверить с помощью isdir или 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...