zoukankan      html  css  js  c++  java
  • 【Python3】操作文件,目录和路径

    1.遍历文件夹和文件 

    Python代码  
    import os   
    import os.path   
    rootdir = "d:/test"  
    for parent,dirnames,filenames in os.walk(rootdir):   
        # case 1:   
        for dirname in dirnames:   
           print ( "parent is:" + parent)   
           print ( " dirnames is:" + dirname)   
        # case 2:   
        for filename in filenames:   
           print ( " parent is:" + parent)   
           print ( " filename with full path:" + os.path.join(parent,filename))  
    Python代码  
    import os  
    import os.path  
    rootdir = "d:/test"  
    for parent,dirnames,filenames in os.walk(rootdir):  
        # case 1:  
        for dirname in dirnames:  
           print ( "parent is:" + parent)  
           print ( " dirnames is:" + dirname)  
        # case 2:  
        for filename in filenames:  
           print ( " parent is:" + parent)  
           print ( " filename with full path:" + os.path.join(parent,filename))  
     
    

    知识点: 
       1. os.walk 返回一个三元组,其中dirnames是所有文件夹名字,filenames是所有文件的名字,parent表示父目录。 
       2. case 1 演示如何遍历所有目录 
       3. case 2 演示如何遍历所有文件 
       4. os.path.join(dirname,filename):将"/test/java"和"helloworld.java"变成/test/java/helloworld.java 

    2.复制文件 


    Python代码  
    import shutil   
    import os   
    import os.path   
      
    src = "d:\test\test1.txt"  
    dst = "d:\test\test2.txt"  
    dst2 = "d:/test/test.txt"    
      
    dir1 = os.path.dirname(src)   
      
    print ("dir1 %s" %s dir1)   
      
    if(os.path.exists(src) == False):   
        os.makedirs(dir1)   
      
    f1 = open(src," w")   
    f1.write( "line a
    " )   
    f1.write( "line b
    " )   
    f1.close();   
      
    shutil.copy(src,dst)   
    shutil.copyfile(src,dst2)   
    f2 = open(dst," r ")   
    for line in f2:   
       print(line)   
    f2.close()   
      
    #测试复制文件夹树   
    try:   
      srcDir = "d:/test1"  
      dstDir = "d:/test2"  
      # 如果dstDir已经存在,那么shutil.copytree方法会报错   
      # 这也意味着你不能直接用d:作为目标路径   
      shutil.copytree(srcDir,dstDir)   
    except Exception as err:   
       print (err)  
    #Python代码  
    import shutil  
    import os  
    import os.path  
      
    src = "d:\test\test1.txt"  
    dst = "d:\test\test2.txt"  
    dst2 = "d:/test/test.txt"   
      
    dir1 = os.path.dirname(src)  
      
    print ("dir1 %s" %s dir1)  
      
    if(os.path.exists(src) == False):  
        os.makedirs(dir1)  
      
    f1 = open(src," w")  
    f1.write( "line a
    " )  
    f1.write( "line b
    " )  
    f1.close();  
      
    shutil.copy(src,dst)  
    shutil.copyfile(src,dst2)  
    f2 = open(dst," r ")  
    for line in f2:  
       print(line)  
    f2.close()  
      
    #测试复制文件夹树  
    try:  
      srcDir = "d:/test1"  
      dstDir = "d:/test2"  
      # 如果dstDir已经存在,那么shutil.copytree方法会报错  
      # 这也意味着你不能直接用d:作为目标路径  
      shutil.copytree(srcDir,dstDir)  
    except Exception as err:  
       print (err)
    

    知识点: 
       1. shutil.copyfile:如何复制文件 
       2. os.path.exists: 如何判断文件夹是否存在 
       3. shutil.copytree: 如何复制目录树 

    3.分割路径和文件名 

    Python代码  
    import os.path   
    #常用函数有三种:分隔路径,找出文件名,找出盘符(window系统),找出文件的扩展名。   
    spath = "d:/test/test.7z"  
      
    # case 1:   
    p,f = os.path.split(spath);   
    print ( "dir is:" + p)   
    print ( " file is:" + f)   
    # case 2:   
    drv,left = os.path.splitdrive(spath);   
    print ( " driver is:" + drv)   
    print ( " left is:" + left)   
      
    # case 3:   
    f,ext = os.path.splitext(spath);   
    print ( " f is: " + f)   
    print ( " ext is:" + ext)  
    Python代码  
    import os.path  
    #常用函数有三种:分隔路径,找出文件名,找出盘符(window系统),找出文件的扩展名。  
    spath = "d:/test/test.7z"  
      
    # case 1:  
    p,f = os.path.split(spath);  
    print ( "dir is:" + p)  
    print ( " file is:" + f)  
    # case 2:  
    drv,left = os.path.splitdrive(spath);  
    print ( " driver is:" + drv)  
    print ( " left is:" + left)  
      
    # case 3:  
    f,ext = os.path.splitext(spath);  
    print ( " f is: " + f)  
    print ( " ext is:" + ext)  
     
    

    知识点: 
      1. 这是哪个函数都返回二元组 
      2. case1 分隔目录和文件名 
      3. case2 分隔盘符和文件名 
      4. case3 分隔文件和扩展名 

    函数总结
    引用

    1. os.walk(spath) 
    2. os.path.split(spath) 
    3. os.path.splitdrive(spath) 
    4. os.path.splitext(spath) 
    5. os.path.join(path1,path2) 
    6. os.path.dirname(path) 
    7. os.path.exists(path) 
    8. shutil.copyfile(src, dst) 
    9. shutil.copytree(srcDir, dstDir) 


    4、文件备份程序 

    Python代码  
    import  os   
    import  shutil   
    import  datetime   
    '''''   
    作用:将目录备份到其他路径。  
    实际效果:  
    假设给定目录"/media/data/programmer/project/python" ,  
    备份路径"/home/diegoyun/backup/“ ,  
    则会将python目录备份到备份路径下,形如:  
    /home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz..  
     
    用法:更改这两个参数.  
    backdir:备份目的地.  
    copydirs:想要备份的文件夹.  
    '''    
      
    def  mainLogic():   
         # add dirs you want to copy    
        backdir = " d:\test "    
         print (backdir)   
      
        copydirs = []   
        copydirs.append( " d:\temp " );   
         # copydirs.append("d:\test");    
           
           
      
         print ( " Copying files  =================== " )   
        start = datetime.datetime.now()   
      
         # gen a data folder for backup    
        backdir = os.path.join(backdir,start.strftime( " %Y-%m-%d " ))   
         # print("backdir is:"+backdir)    
      
           
        kc = 0  
         for  d  in  copydirs:   
            kc = kc + copyFiles(d,backdir)   
      
        end = datetime.datetime.now()   
         print ( " Finished! =================== " )   
         print ( " Total files :  "   +  str(kc) )   
         print ( " Elapsed time :  "   +  str((end - start).seconds) + "  seconds " )   
      
    def  copyFiles(copydir,backdir):   
        prefix = getPathPrefix(copydir)   
         # print("prefix is:"+prefix )       
      
        i = 0  
         for  dirpath,dirnames,filenames  in  os.walk(copydir):   
             for  name  in  filenames:   
                oldpath = os.path.join(dirpath,name)   
                newpath = omitPrefix(dirpath,prefix)   
                 print ( " backdir is: " + backdir )              
                newpath = os.path.join(backdir,newpath)   
                 print ( " newpath is: " + newpath)   
      
                 if  os.path.exists(newpath) != True:   
                    os.makedirs(newpath)     
                newpath = os.path.join(newpath,name)   
                 print ( " From: " + oldpath + "  to: " + newpath)   
                shutil.copyfile(oldpath,newpath)   
                i = i + 1    
         return  i       
      
    def  getPathPrefix(fullpath):   
         # Giving /media/data/programmer/project/ , get the prefix    
         # /media/data/programmer/    
        l = fullpath.split(os.path.sep)   
         # print(str(l[-1]=="")        
         if  l[ - 1 ] == "" :   
            tmp = l[ - 2 ]   
         else :   
            tmp = l[ - 1 ]   
         return  fullpath[0:len(fullpath) - len(tmp) - 1 ]   
      
    def  omitPrefix(fullpath,prefix):   
         # Giving /media/data/programmer/project/python/tutotial/file/test.py ,    
         # and prefix is Giving /media/data/programmer/project/,    
         # return path as python/tutotial/file/test.py    
         return  fullpath[len(prefix) + 1 :]   
      
    mainLogic()  
    

  • 相关阅读:
    vue混入(mixins)
    vue.js依赖安装和引入
    vue.js入门环境搭建
    thinkPHP5.0使用form表单提交数据和删除文章,不用TP的提示页面,使用弹出提示信息
    js网页瀑布流布局
    浏览器存储localStorage、sessionStorage、cookie
    JS图片加载失败用默认图片代替
    PHP、thinkPHP5.0开发网站文件管理功能(四)下载文件
    PHP、thinkPHP5.0开发网站文件管理功能(三)编辑文件
    PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件
  • 原文地址:https://www.cnblogs.com/lanqiu5ge/p/9472240.html
Copyright © 2011-2022 走看看