“Python云存储备份”的版本间的差异

来自CloudWiki
跳转至: 导航搜索
第55行: 第55行:
 
                 dirs.append(path)
 
                 dirs.append(path)
 
listDirWidthFirst('.')</nowiki>
 
listDirWidthFirst('.')</nowiki>
 +
 +
 +
===复制云端目录(未完)===
 +
<nowiki>from os import listdir
 +
from os.path import join, isfile, isdir
 +
 +
dirs= []
 +
def CopyDirWidthFirst(old_dir,new_dir):
 +
    '''广度优先遍历文件夹'''
 +
    #使用列表模拟双端队列,效率稍微受影响,不过关系不大
 +
    global dirs
 +
    dirs = [old_dir]#这个old_dir就是列表的第一个元素
 +
    #如果还有没遍历过的文件夹,继续循环
 +
    while dirs:
 +
        #遍历还没遍历过的第一项
 +
        current = dirs.pop(0)
 +
        #遍历该文件夹,如果是文件就直接输出显示
 +
        #如果是文件夹,输出显示后,标记为待遍历项
 +
        for subPath in listdir(current):
 +
            print(subPath)
 +
            >>> os.path.split(path)
 +
          ('D:\\teaching\\自动化运维\\练习', '7.1.py')
 +
          current.split("teaching\\")
 +
            path = join(current, subPath)
 +
            if isdir(path):
 +
                #print(path)
 +
                dirs.append(path)
 +
 +
 +
CopyDirWidthFirst(r'D:\teaching\自动化运维\练习','')</nowiki>

2020年3月30日 (一) 02:56的版本

比较左右两侧文件

import filecmp

import os
left = r"D:\teaching\人工智能" # 定义左目录

right = r"E:\20200311\teaching\人工智能" #定义右目录

#比较目录
dirobj = filecmp.dircmp(left, right, ['cmp.py']) #目录比较,忽略test.py文件
dirobj.report()

print("left_only:")
print(dirobj.left_only) # 只在左目录中的文件或目录

复制文件

import shutil
for i in dirobj.left_only:
    left_file=os.path.realpath(i)
    right_file=os.path.join(right,i)
    print("左侧发现新文件/目录: "+i)
    print(left_file)
    print(right_file)
    s=input("是否复制?y/n")
    if s=='y':
        print("开始复制中...")
        shutil.copyfile(left_file,right_file)
        print("复制完毕"+right_file)

广度优先遍历目录

from os import listdir
from os.path import join, isfile, isdir

def listDirWidthFirst(directory):
    '''广度优先遍历文件夹'''
    #使用列表模拟双端队列,效率稍微受影响,不过关系不大
    dirs = [directory]#这个directory就是列表的第一个元素
    #如果还有没遍历过的文件夹,继续循环
    while dirs:
        #遍历还没遍历过的第一项
        current = dirs.pop(0)
        #遍历该文件夹,如果是文件就直接输出显示
        #如果是文件夹,输出显示后,标记为待遍历项
        for subPath in listdir(current):
            path = join(current, subPath)
            if isfile(path):
                print(path)
            elif isdir(path):
                print(path)
                dirs.append(path)
listDirWidthFirst('.')


复制云端目录(未完)

from os import listdir
from os.path import join, isfile, isdir

dirs= []
def CopyDirWidthFirst(old_dir,new_dir):
    '''广度优先遍历文件夹'''
    #使用列表模拟双端队列,效率稍微受影响,不过关系不大
    global dirs
    dirs = [old_dir]#这个old_dir就是列表的第一个元素
    #如果还有没遍历过的文件夹,继续循环
    while dirs:
        #遍历还没遍历过的第一项
        current = dirs.pop(0)
        #遍历该文件夹,如果是文件就直接输出显示
        #如果是文件夹,输出显示后,标记为待遍历项
        for subPath in listdir(current):
            print(subPath)
            >>> os.path.split(path)
           ('D:\\teaching\\自动化运维\\练习', '7.1.py')
           current.split("teaching\\")
            path = join(current, subPath)
            if isdir(path):
                #print(path)
                dirs.append(path)


CopyDirWidthFirst(r'D:\teaching\自动化运维\练习','')