Bu konuyla ilgili birkaç soru buldum, ancak gördüğüm sorunu gideren hiçbiri yok. Önceden özür dilerim python için yeniyim. Ne yapmaya çalışıyorum somedir altındaki her dizindeki dosyaların sayısını ise/bu yüzden böyle bir şey alacağı:dizin başına python başına dosya basma sayısı
from os import listdir
from os.path import isfile, isdir
def walk(p):
for file in listdir(p):
if isfile(file):
print("File: " + file)
elif isdir(file):
print("Dir: " + file)
walk(file)
else:
print("Unknown: " + file)
path = raw_input('Enter path to search')
walk(path)
: Ben bu olurdu yapabileceğim kanıtlamak için en kolay yolu düşünce
dir-a: 13
dir-b: 6
dir-c: 21
Ancak, ilk yineleme beklendiği gibi çalışan tek örnektir. Dosyanın tam yolunu os.path.abspath
ile eklemeyi ve yinelemeli aramalarda olduğu gibi, dosyanın ilk yinelemede aynı olduğundan emin olmak için birkaç yolu daha denedim. type(file)
ile yazdım ve 'str'
ve yol + dosya adı doğruysa ve yukarıdaki program hala beklenen sonuçları üretmek için başarısız olsa bile. Böyle bir dizin yapısı hakkında Örneğin:
dir-a/
file-a.1
file-a.2
dir-b/
file-b.1
file-b.2
file-a.3
ben beklenebilir:
File: file-a.1
File: file-a.2
Dir: dir-b
File: file-b.1
File: file-b.2
File: file-a.3
ama olsun:
File: file-a.1
File: file-a.2
Dir: dir-b
Unknown: file-b.1
Unknown: file-b.2
File: file-a.3
Yani temelde tüm dosyalar üzerinde dosya veya dirs olarak tanımlanan sakın özyinelemeli çağrılar. listdir
, isfile
ve isdir
'daki belgelere baktım ve yine de mantıklı değil. Aynı davranışta python 2.7.5 ve 3.4.0 ile çalıştım. Herhangi bir yardım takdir edilir.
Önceden yinelenen dizinler ile 'file' (sadece temel addır) önekini yapmanız gerekir. – 5gon12eder
Not etmeye değer: 'file' değişken olarak kullanmayın - python'da bir anahtar kelime! – alfasin
@alfasin Yararlı bilgiler. Teşekkürler. – achyrd