在python中递归遍历目录结构而不使用os.walk
我试图编写一个python2函数,该函数将递归遍历给定目录的整个目录结构,并打印出结果 所有这些都不使用os.walk 到目前为止,我得到的是:在python中递归遍历目录结构而不使用os.walk,python,python-2.7,for-loop,recursion,Python,Python 2.7,For Loop,Recursion,我试图编写一个python2函数,该函数将递归遍历给定目录的整个目录结构,并打印出结果 所有这些都不使用os.walk 到目前为止,我得到的是: test_path = "/home/user/Developer/test" def scanning(sPath): output = os.path.join(sPath, 'output') if os.path.exists(output): with open(output) as file1:
test_path = "/home/user/Developer/test"
def scanning(sPath):
output = os.path.join(sPath, 'output')
if os.path.exists(output):
with open(output) as file1:
for line in file1:
if line.startswith('Final value:'):
print line
else:
for name in os.listdir(sPath):
path = os.path.join(sPath, name)
if os.path.isdir(path):
print "'", name, "'"
print_directory_contents(path)
scanning(test_path)
这是我当前得到的,脚本未进入新文件夹:
' test2'
'new_folder'
问题是它不能深入到一个以上的目录。我还希望能够直观地指出什么是目录,什么是文件尝试使用递归函数
def lastline(fil):
with open(fil) as f:
for li in f.readlines():
if li.startswith("Final Value:"):
print(li)
## If it still doesnt work try putting 'dirs=[]' here
def lookforfiles(basepath):
contents = os.listdir(basepath)
dirs = []
i = 0
while i <= len(contents):
i += 1
for n in contents:
f = os.path.join(basepath, n)
if os.path.isfile(f):
lastline(f)
print("\n\nfile %s" % n)
elif os.path.isdir(f):
print("Adding dir")
if f in dirs:
pass
else:
dirs.append(f)
else:
for x in dirs:
print("dir %s" % x)
lookforfiles(x)
def lastline(fil):
打开(fil)作为f:
对于f.readlines()中的li:
如果li.startswith(“最终值:”):
印刷品(李)
##如果仍然不起作用,请尝试在此处输入'dirs=[]
def lookforfiles(基本路径):
contents=os.listdir(基本路径)
dirs=[]
i=0
而我试试这个:
import os
test_path = "YOUR_DIRECTORY"
def print_directory_contents(dir_path):
for child in os.listdir(dir_path):
path = os.path.join(dir_path, child)
if os.path.isdir(path):
print("FOLDER: " + "\t" + path)
print_directory_contents(path)
else:
print("FILE: " + "\t" + path)
print_directory_contents(test_path)
我在windows上工作,请验证是否仍在unix上工作。
改编自:
这个问题是重复的
TL;TR:Useos.listdir
使用递归尝试一下
它非常简单,代码更少
import os
def getFiles(path="/var/log", files=[]):
if os.path.isfile(path):
return files.append(path)
for item in os.listdir(path):
item = os.path.join(path, item)
if os.path.isfile(item):
files.append(item)
else:
files = getFiles(item, files)
return files
for f in getFiles("/home/afouda/test", []):
print(f)
lookforfiles函数中的f显示为未解析引用,我做错了什么吗?我自己发现了。我的大脑添加了我手无法理解的代码。刚刚编辑好,哈哈,不用担心,每个人都会这样!虽然我在您的代码中遇到了一个错误:TypeError:conjusting to Unicode:need string或buffer,但在lookforfiles函数的第行:contents=os.listdir(basepath)中找到了NoneType。请确保目录正确,并在控制台中尝试使用任何目录。只是为了让你能看到输出。好吧,这在我这方面很有效。请注意,在读取文件时,有时它无法分辨文件类型,如果无法读取文本,它将抛出和异常。不幸的是,os.walk
仍然是最可行的文件夹列表机制,即使在python 3下。我更愿意使用它!但是,有人要求我不要使用os.walk:(我可以确认我使用的是linux:)是的,在linux上工作很好