设为首页 收藏本站
查看: 556|回复: 0

[经验分享] (转)python 笔记1

[复制链接]

尚未签到

发表于 2017-4-27 10:48:52 | 显示全部楼层 |阅读模式
  刚学python,把简明教程搞完了,在网上看到的一些方便的函数,粘一下 
1 遍历文件夹和文件

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->import  os
import  os.path
#  os,os.path里包含大多数文件访问的函数,所以要先引入它们.
#
 请按照你的实际情况修改这个路径
rootdir  =   " d:/download "
for  parent, dirnames, filenames  in  os.walk(rootdir):
    
# case 1:
     for  dirname  in  dirnames:
        
print  ( " parent is: "   +  parent)
        
print  ( " dirname is: "   +  dirname)
    
# case 2
     for  filename  in  filenames:
        
print  ( " parent is: "   +  parent)
        
print  ( " filename with full path : "   +  os.path.join(parent, filename))

''' 知识点:

    * os.walk返回一个三元组.其中dirnames是所有文件夹名字(不包含路径),filenames是所有文件的名字(不包含路径).parent表示父目录.
    * case1 演示了如何遍历所有目录.
    * case2 演示了如何遍历所有文件.
    * os.path.join(dirname,filename) : 将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".
'''

2 分割路径和文件名
<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->import  os.path
# 常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.
#
根据你机器的实际情况修改下面参数.
spath = " D:/download/repository.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)
'''
    知识点:    这三个函数都返回二元组.
    * case1 分隔目录和文件名
    * case2 分隔盘符和文件名
    * case3 分隔文件和扩展名
'''

  

总结:5个函数

  • os.walk(spath)
  • os.path.split(spath)
  • os.path.splitdrive(spath)
  • os.path.splitext(spath)
  • os.path.join(path1,path2)
3 实战:文件备份小程序

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->import  os
import  shutil
import  datetime

'''
作用:将目录备份到其他路径。
实际效果:
假设给定目录"/media/data/programmer/project/python" ,
备份路径"/home/diegoyun/backup/“ ,
则会将python目录备份到备份路径下,形如:
/home/diegoyun/backup/yyyymmddHHMMSS/python/xxx/yyy/zzz DSC0000.gif ..

用法:更改这两个参数.
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()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369889-1-1.html 上篇帖子: Python Toturial(Python指南) v2.6阅读笔记 下篇帖子: Python 性能剖分工具
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表