python 需求文件:
这个函数接受文件夹的名称作为输入参数
返回该文件夹中文件的路径
以及其包含文件夹中文件的路径。
## 标题一:解读需求文件 ##
首先需求文件要求返回文件夹中文件的路径以及包含文件文件夹的文件路径,从这里我们就要捉到一个关键点文件夹,在os模块中os.path.isdir()是判断其是否为文件夹的一个重要函数,是则返回True,否则False
再者,如何将当前的文件夹下的文件全部列举出来,这是就要用到os.listdir()的功能:列举当前文件夹下所有文夹的所有文件
最后一点就是返回文件路径,需要一个列表去接受返回的文件路径
我们可以用栈和队列的方法来写:
## 标题二:用栈的方法来写 ##
def print_directory_contents(sPath):
stack = [] #创建一个空栈
filelist = [] #创建一个空的列表,为存放文件路径做铺垫。
stack.append(sPath) #要记住栈的特点,先进后出,把目录压栈。
while len(stack) > 0: #利用栈的长度作为循环判断的条件,
filePath = stack.pop() #出栈
fileList = os.listdir(filePath) #创建一个列表用了存放列举该路径下所有文件
for filepath in fileList: #循环遍历
absfilepath = os.path.join(filePath, filepath) #进行路径拼接,这里就是把路径下的所有文件拼接到原来sPath
#然后才能作为os.path.isdir()函数的判断条件
if os.path.isdir(absfilepath):
stack.append(absfilepath) #若为文件夹,则要继续进栈循环到不是文件夹为止
else:
filelist.append(absfilepath)#若为文件,这是将文件的绝对路径append给filelist列表
return filelist #循环结束之后把得到文件路径的列表返回给函数
print (print_directory_contents(r"D:\python"))
----------
## 标题三 用队列来写##
import collections #使用队列要调用collections模块
def print_directory_contents(path):
Queue = collections.deque() #注意队列的进队和出队的写法,一定要记住,下 面的步骤和栈的方法差不多,不再累赘
filelist = []
Queue.append(path)
while len(Queue):
filepath = Queue.popleft()
fileList = os.listdir(filepath)
for p in fileList:
absfilepath = os.path.join(path, p)
if os.path.isdir(absfilepath):
Queue.append(absfilepath)
else:
filelist.append(absfilepath)
return filelist
print (print_directory_contents(r"D:\python"))