python 中 os 模块返回文件路径练习

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"))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值