资讯专栏INFORMATION COLUMN

文件目录遍历

Wuv1Up / 475人阅读

摘要:递归遍历目录和文件作业和习题获取当前目录下所有文件及文件目录遍历列表拼接绝对路径目录文件栈深度遍历目录文件队列广度遍历目录文件复制目录和文件复制目录如果源目录不存在直接停止如果目标文件不存在或者如果该文件

递归遍历目录和文件
import os

path = r"F:PycharmProjectsasic gram作业和习题	est"

def getAllFileAndDir(path):
    # 获取当前目录下所有文件及文件目录
    fileList = os.listdir(path)
    # print(fileList)

    # 遍历fileList列表
    for fileName in fileList:
        # isdir isfile
        # print(fileName)
        # 拼接绝对路径
        absFile = os.path.join(path,fileName)
        if os.path.isdir(absFile):
            print(absFile+"---目录")
            getAllFileAndDir(absFile)
        else:
            print(absFile+"---文件")    
getAllFileAndDir(path)

栈 深度遍历
import collections

def getAllFileAndDir(sourcePath):

    stack = collections.deque()
    stack.append(sourcePath)
    while len(stack) != 0:
        path = stack.pop()
        fileList = os.listdir(path)
        for fileName in fileList:
            absFile = os.path.join(path, fileName)
            if os.path.isdir(absFile):
                print(absFile+"---目录")
                stack.append(absFile)
            else:
                print(absFile+"---文件")

getAllFileAndDir(path)
队列 广度遍历
def getAllFileAndDir(sourcePath):

    queue = collections.deque()
    queue.append(sourcePath)

    while len(queue) !=0:
        path = queue.popleft()
        fileList = os.listdir(path)
        for fileName in fileList:
            absFile = os.path.join(path, fileName)
            if os.path.isdir(absFile):
                print(absFile+"---目录")
                queue.append(absFile)
            else:
                print(absFile+"---文件")


getAllFileAndDir(path)

复制目录和文件
import os
# 复制目录
def copyDir(sourDir,targetDir):
    if not os.path.exists(sourDir):
        print("如果源目录不存在,直接停止")
        return

    if not os.path.exists(targetDir):
        os.makedirs(targetDir)

    listName = os.listdir(sourDir)
    for dirNameAndFileName in listName:
        sourAbsPath = os.path.join(sourDir,dirNameAndFileName)
        targetAbsPath = os.path.join(targetDir,dirNameAndFileName)
        if os.path.isdir(sourAbsPath):
            copyDir(sourAbsPath,targetAbsPath)
        if os.path.isfile(sourAbsPath):
            #   如果目标文件不存在,   或者   如果该文件已经存在但是文件大小不一样
            if (not os.path.exists(targetAbsPath)) or (os.path.exists(targetAbsPath) and (os.path.getsize(sourAbsPath) != os.path.getsize(targetAbsPath))):
                rf = open(sourAbsPath,"rb")
                wf = open(targetAbsPath,"wb")
                while True:
                    content = rf.read(1024*1024)
                    if len(content) == 0:
                        break
                    wf.write(content)
                    wf.flush()
                wf.close()
                rf.close()

sPath = r"F:PycharmProjectsasic gram作业和习题	est"
tPath = r"F:PycharmProjectsasic gram作业和习题	estNew"
copyDir(sPath, tPath)
文件复制实例
1.一个函数接受文件夹的名称作为输入参数,请将该文件夹中的所有文件复制到 文件夹名-副本  中去,请补充缺失的代码. (20分)
def copyFile(sPath)
2.题1复制过程中,每隔一秒打印一次复制进度(即当前已复制个数/总文件个数)(15分)
import os
import collections
import time
import sys
def getFileNum(sPath):
    num = 0
    stack = collections.deque()
    stack.append(sPath)
    while len(stack) != 0:
        path = stack.pop()
        fileList = os.listdir(path)
        for fileName in fileList:
            absFile = os.path.join(path, fileName)
            if os.path.isdir(absFile):
                stack.append(absFile)
            else:
                num += 1
    return num

def copyFile(sPath):
    tPath = r"F:PycharmProjectsasic gram作业和习题Anaconda3-副本"
    stack1 = collections.deque()
    stack1.append(sPath)
    stack2 = collections.deque()
    stack2.append(tPath)
    timepoint = 1
    filenum = 0
    while len(stack1) != 0:
        sPath = stack1.pop()
        tPath = stack2.pop()
        if not os.path.exists(tPath):
            os.makedirs(tPath)
        listName = os.listdir(sPath)
        for filename in listName:
            absfile = os.path.join(sPath, filename)
            tabsfile = os.path.join(tPath, filename)
            if os.path.isdir(absfile):
                stack1.append(absfile)
                stack2.append(tabsfile)
            else:
                rf = open(absfile, "rb")
                wf = open(tabsfile, "wb")
                while True:
                    content = rf.read(1024*1024)
                    if len(content) == 0:
                        break
                    wf.write(content)
                    # 刷新缓冲区
                    wf.flush()
                    if time.clock()//1 == timepoint:
                         sys.stdout.write("
进度:%d/%d"%(filenum,num))
                         timepoint += 1
                wf.close()
                rf.close()
                filenum += 1
    sys.stdout.write("
进度:%d/%d" % (num, num))


sPath = r"F:PycharmProjectsasic gram作业和习题Anaconda3"

num = getFileNum(sPath)
# print(num)
start_time = time.clock()
copyFile(sPath)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41661.html

相关文章

  • 08File类之File类的遍历文件目录的方法

    摘要:类遍历文件夹目录功能返回一个数组,表示该目录中的所有子文件或目录。遍历构造方法中给出的目录会获取目录中所有文件文件夹的名称把获取到的多个名称存储到一个类型的数组中这个遍历出来的显示文件夹或者文件的路径 package com.itheima.demo01.File; import java.io.File; /* File类遍历(文件夹)目录功能 - public String...

    edgardeng 评论0 收藏0
  • Android 安全开发之 ZIP 文件目录遍历

    摘要:阿里聚安全的应用漏洞扫描服务,可以检测出应用的文件目录遍历风险。阿里聚安全对开发者建议对重要的压缩包文件进行数字签名校验,校验通过才进行解压。 1、ZIP文件目录遍历简介 因为ZIP压缩包文件中允许存在../的字符串,攻击者可以利用多个../在解压时改变ZIP包中某个文件的存放位置,覆盖掉应用原有的文件。如果被覆盖掉的文件是动态链接so、dex或者odex文件,轻则产生本地拒绝服务漏洞...

    sorra 评论0 收藏0
  • 1、File 2、递归

    摘要:技术概述技术概述把内存中的数据存储到持久化设备上这个动作称为输出写操作把持久设备上的数据读取到内存中的这个动作称为输入读操作操作把上面的这种输入和输出动作称为操作类的概述和作用类的概述和作用的概念类是文件和目录路径名的抽象表示形式中把文件或 01IO技术概述.avi(02:49) * A:IO技术概述 * a: Output * 把内存中的数据存储到持久化设备上...

    Code4App 评论0 收藏0
  • 这可能是最详细的Python文件操作

    摘要:删除删除只能删除文件,若为目录则报错若文件正在使用,下会直接报错,下会在目录表中删除记录,但文件还在与一样的作用删除目录,目录必须为空,否则报错递归删除空目录删除整个目录不管此目录下有多少目录和文件新建新建新建文件夹,若倒数第二层文件夹不存 删除 # ==================删除================== # 只能删除文件,若为目录则报错 # 若文件正在使用,Wi...

    阿罗 评论0 收藏0
  • 04递归遍历多级文件目录

    摘要:练习递归打印多级目录需求遍历文件夹及文件夹的子文件夹定义一个方法参数传递类型的目录方法中对目录进行遍历打印被遍历的目录名称对遍历得到的对象进行判断判断是否是文件夹是一个文件夹则继续遍历这个文件夹我们发现方法就是传递文件夹遍历文件夹的方法所以 package com.itheima.demo02.Recursion; import java.io.File; /* 练习: 递归打...

    scq000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<