LinuxForum.Fans
Тема

isdir для элементов списка ( python3 )

Автор: Kenny 4 сообщений 1567 просмотров
#379985

Всем привет !!! Возникла такая проблема :
У меня есть список с именами файлов и папок . Для того, чтобы проверить является ли i-й элеиент списка папкой я юзаю функцию isdir . Но он ругается :(
Вот его ругань :

text
Traceback (most recent call last):
  File "./dirs.py", line 10, in <module>
    if path.isdir ( z ) :
  File "/usr/lib/python3.2/genericpath.py", line 41, in isdir
    st = os.stat(s)
TypeError: Can't convert 'list' object to str implicitly

Вот код :

text
#!/usr/bin/python3
from os import *
import sys 
pat = str(sys.argv[1])
z = ''
chdir (pat)
dirs = [  ]
dirs.append( listdir( pat ) )
for z in dirs :
  if path.isdir ( z ) :
    print("Это папка")
#379988
"Kenny" написал:
Can't convert 'list' object to str implicitly

Ни о чем не говорит?

"Kenny" написал:
dirs.append( listdir( pat ) )

Если я правильно понимаю, append должен добавить элементы в массив. Но listdir возвращает список, так и получается, что в dirs добавляется 1 элемент и тот является списком. Отсюда и ошибка. Впрочем, я могу ошибаться, не силен в python.

Я не знаю, как делается все в python3, но в python2 я бы сделал так:

text
import os
import sys

if (len(sys.argv) > 1): indir = os.listdir(sys.argv[1]) else: indir = os.listdir("./")

for i in indir: if (os.path.isdir(i)): print(i + " is a dir") else: print(i + " is not a dir")

и запускать, соответственно,

text
python script.py /какой-то/каталог

или

text
python script.py

в последнем случае, пробежится по ./

#379989
"Kenny" написал:
text
dirs = [ ]
dirs.append( listdir( pat ) )

Каков тайный смысл данной конструкции?
Тогда уж

text

dirs = listdir(pat)
#379990
-=Serj=- написал:
[quote="Kenny"]
text
dirs = [ ]
dirs.append( listdir( pat ) )

Каков тайный смысл данной конструкции?
Тогда уж

text

dirs = listdir(pat)

[/quote]
Спасибо . Сам разобрался . Но есть одно НО . ListDir видит папки которых нет . Например у меня в дом.дир он нашел папку какую-то ...

Войдите или зарегистрируйтесь, чтобы ответить.