社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python在自动化运维时经常会用到的方法

马哥Linux运维 • 7 年前 • 792 次点击  

本文由马哥教育Python自动化实战班6期学员推荐,转载自互联网,作者为seed,内容略经小编改编和加工,观点跟作者无关,最后感谢作者的辛苦贡献与付出。

随着信息时代的迅速发展,尤其是互联网日益融入大众生活,作为这一切背后的IT服务支撑,运维角色的作用越来越大,传统的人工运维方式已经无法满足业务的发展需求,需要从流程化、标准化、自动化去构建运维体系,其中流程化与标准化是自动化的前提条件,自动化的最终目的是提高工作效率、释放人力资源、节约运营成本、提升业务服务质量等。


下面我们梳理了下一些Python在自动化运维时经常会用到的方法:



得到当前工作目录,即当前Python脚本工作的目录路径:os.getcwd()

返回指定目录下的所有文件和目录名:os.listdir()

函数用来删除一个文件:os.remove()

删除多个目录:osremovedirs(r"c:\python")  //略危险,熟练之后再用吧

检验给出的路径是否是一个文件:os.path.isfile()   //经常会用

检验给出的路径是否是一个目录:os.path.isdir()    //经常会用

判断是否是绝对路径:os.path.isabs()

检验给出的路径是否真实存在:os.path.exists()

返回一个路径的目录名和文件名:os.path.split()

例:import os 

os.path.split('/home/swaroop/byte/code/poem.txt')

结果为:('/home/swaroop/byte/code','poem.txt')     //就是把路径和文件

名分别列出来显得更加清楚

分离扩展名:os.path.splitext()

获取路径名:os.path.dirname()

获取文件名:os.path.basename()

运行shell命令:os.system()

读取和设置环境变量:os.getenv()与os.putenv()

给出当前平台使用的行终止符:os.linesep   windows使用'\r\n',linux使

用'\n'而mountainlion使用的是'\r'

显示你正在使用的平台:os.name 对于windows,他是'nt',而对于linux/unix

,他是'posix'

重命名:os.rename(old,new)

创建多集目录:os.makedirs(r"c:\python\test")

创建单个目录:os.mkdir("test")

获取文件属性 os.stat(file)

修改文件权限和时间戳:os.chmod(file)

终止当前进程:os.exit()  //python2.4可用

获取文件大小:os.path.getsize(filename)

文件操作:

os.mknod("test.txt")    创建空文件

fp = open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件

关于open/file的模式:

w 以写的方式打开

a 以追加的模式打开(从EOF开始,必要时创建新文件)

r+ 以读写模式打开

w+ 以读写模式打开 //据说不好用

a+ 以读写模式打开 //我比较喜欢用,读写打开后追加

rb 以二进制读模式打开

wb 以二进制写模式打开

ab 以二进制追加模式打开

rb+ 以二进制读写模式打开

wb+ 以二进制读写模式打开

ab+ 以二进制读写模式打开

fp.read([size])     //size 为读取长度,以byte为单位

fp.readline([size]) //读一行,如果定义了size,有可能返回的只是一行的一

部分

fp.write(str)    //把str写到文件中,write()并不会在str后加上一个换行符

fp.writelines(seq) //把seq的内容全部写到文件中(多行一次性写入)。这个

函数也只是忠实地写入,不会在每行后面加任何东西

fp.close()   

fp.flush()      //把缓冲区的内容写入硬盘

fp.fileno()     //返回一个长整形的“文件标签”

fp.isatty() //文件是否是一个终端设备文件(unix系统中的)

fp.tell() //返回当前位置,比如:

fp = open("zhige.txt",'a+')  //zhige.txt里的内容为zhigedahaoren

fp.read(3)

c = fp.tell()

print c   //会返回显示zhigedahaoren里的第三个字母i

fp.next()   //返回下一行,并将文件操作标记位移动到下一行

把一个file用于for...in file 这样的语句时,就是调用next()函数来实现遍历

fp.seek(offset[,whence])   //讲文件的游标移动到offset的位置和tell搭配

做实验看比较明显

fp.truncate([size])    //把文件裁成规定的大小,默认的是裁到当前文件操

作坐标的位置。如果size比文件大小还要大,依据系统的不同,可能是不改变文

件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。

目录操作:   //感觉可以用 os.system('')里写shell完成

os.mkdir("file")  创建目录

复制文件:

shutil.copyfile("oldfile","newfile")  //oldfile和newfile都智能是文件

shutil.copy("oldfile","newfile") //oldfile只能是文件,newfile可

以是文件,也可以是目标目录

复制文件夹:

shutil.copytree("olddir","newdir") //olddir和newdir都只能是目录,

且newdir必须不存在

重命名文件(目录):

os.rename("oldname","newname") //文件或目录都是这条命令

移动文件(目录)

shutil.move("oldpos","newpos")

删除文件

os.remove("file")

删除目录:

os.rmdir("dir")  //只能删除空目录

shutil.rmtree("dir") //空目录,有内容的目录都可以删

转换目录:

os.chdir("path")   //更换路径

一些详解:

seek(offset,where): where=0从起始位置移动,1从当前位置移动,2

从结束位置移动。当有换行时,会被换行截断。seek()无返回值,故值为None。

tell(): 文件的当前位置,即tell是获得文件指针的位置,受

seek,readline,read,readlines影响,不受truncate影响

truncate(n):从文件的首行字符开始截断,截断文件为n个字符;无n

表示从当前位置起截断;阶段之后n后面的说有字数被删除。其中win下的换行代

表2个字符大小。

readline(n):读入若干行,n表示读入的最长字节数。其中读取的开始

位置为tell()+1。当n为空时,默认只读当前行的内容

readlines 读入所有行内容

read 读入所有行内容


二、以下以一个例子说明以上各函数的作用



fso = open("f:\\a.txt",'w+')    //以w+方式,并非a方式打开文件,故文件

原内容被清空

print fso.tell()   //文件原内容被清空,故此时tell()=0

fso.write("abcde\n") //写入文件abcde\n,因为换行\n占2个字符,故写入了7

个字符

print fso.tell()  此时tell()=7

fso.write("fghwm") //又写入文件fghwm,故此时文件共写入7+5=12个字符

print fso.tell()   //此时tell()=12

fso.seek(1,0)  //从其实位置即文件首行首字符开始移动一个字符

print fso.tell()   //此时tell()=1

print fso.readline() //读取当前行,即文件的第一行,但是会从第二个字符

开始读,结果为bcde

//若换成for读取整个文件或者read读取整个文件则结果为bcdefghwm

print fso.tell()   //因为readline此时tell()=7

fso.truncate(8) //从写入后文件的首行字符开始算,截断为8个字符,即

abced\nf,即文件内容为:abcde\nf

print fso.tell()  //tell()依旧为7,并为受truncate(8)的影响,但此时文件

的内容为abcde\nf

print fso.readline()  //从tell()+1=8 开始读取,读取当前行内容:f




————广告时间————


马哥教育2017年Python自动化开发实战班,马哥联合BAT、豆瓣等一线互联网Python开发达人,根据目前企业需求的Python开发人才进行了深度定制,加入了大量一线互联网公司:大众点评、饿了么、腾讯等生产环境真是项目,课程由浅入深,从Python基础到Python高级,让你融汇贯通Python基础理论,手把手教学让你具备Python自动化开发需要的前端界面开发、Web框架、大监控系统、CMDB系统、认证堡垒机、自动化流程平台六大实战能力,让你从0开始蜕变成Hold住年薪20万的Python自动化开发人才


Python学习免费交流QQ群:542679406(千人群)


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/Z7cpND0KTv
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/2631
 
792 次点击