运维初学PythonDay06

集合(set)

如果有多个相同的元素 只算一个(去重)无序 不可变

也是一个可迭代的对象

添加 集合.add(元素)

删除 集合.remove(元素)

set01={10,1.23,"heh",(1,2),10}
print(set01,type(set01),len(set01))
set01.add("yhl")
print(set01)
set01.remove("yhl")
print(set01)

& | - 交 并 补

通常转换为集合用来做为去重复操作 set(xxxx)

c=[1,2,3,4,4,2,1]
print(type(list(set(c))))#最后查看类型还是set

文件的比较

with open("/opt/python/a.log",mode="r") as a:
    aset=set(a)
with open("/opt/python/b.log",mode="r") as b:
    bset=set(b)
with open("/opt/python/c.log", mode="w") as c:
    c.writelines(bset - aset)#把a文件比b文件多出来的写入到c文件里面

模块shutil (跨平台的一种操作)

sh+util shell和工具

shutil与OS模块是一个互相的补充

封装了对文件的复制与移动压缩解压等操作

文件的复制与移动

shutil.copyfileobj(src,dest,length=16*1024)#:只能复制文件的内容,无法复制权限

shutil.copyfile(src路径,dest路径)#:只能复制文件的内容,无法复制权限

shutil.copy(src路径,dest路径)#:复制文件的内容与权限

shutil.move(src路径,dest路径)#:移动或者是重命名

目录操作

shutil.copytree(src路径,dest路径)#目标目录必须不存在,存在就会报错 说目录已经存在

shutil.rmtree(src路径,dest路径) #空目录非空都可删除

权限

shutil.copymode(src路径,dest路径)#只复制权限

shutil.chown(path, user=None, group=None)

shutil.chown("/etc/mypasswd",user="alice",group="alice")

OS模块

python访问操作系统的主要功能 与shutil相辅相成

一个函数对应一个命令

os.getcwd()#相当于pwd
os.listdir()#列出指定目录的文件
os.mkdir("目录")#创建目录
os.makedirs("目录")#创建多级目录
os.chdir("/")#change directory改变目录
os.listdir()# 相当于ls -A
os.remove(文件)#删除文件 #删除目录的话用shutil.rmtree()
os.symlink("源文件","目标")#软链接
os.unlink()#取消软链接
os.chmod()#改变权限模式
>>> os.path.basename("/etc/selinux/config")#基本名称
'config'
>>> os.path.dirname("/etc/selinux/config")#目录名称
'/etc/selinux'
>>> os.path.split("/etc/selinux/config") #以最后一个/切割
('/etc/selinux', 'config')
os.path.join("/etc/selinux","config")
os.path.exists("/etc/hosts")#判断字符串表示的路径存不存在

subprocess模块(子进程)

没有跨平台性

主要用于执行系统命令 获取他们的返回结果

subprocess.run()

subprocess.run(["ls","/home"])#把命令与参数放入列表 subprocess.run("ip a s",shell=True)#以shell去执行

run()函数的返回值

data1=subprocess.run("ip a s",shell=True) data=subprocess.run(["cat","/etc/hosts"]) print("data:",data) print("data1:",data1)

CompletedProcess:以完成进程 args 命令 returncode:成功为0 与shell中的echo $?一样

列表推导式(查看主机是否存活)

ips=[f"172.40.63.{i}" for i in range(1,256)]#列表推导式

def ping(host):
    data=subprocess.run(f"ping -c2 -W0.1 {host} &> /dev/null", shell=True)
    if data.returncode==0:
        print(f"{host}: up")
    else:
        print(f"{host}: down")
if __name__ == '__main__':
    ips = [f"172.40.63.{i}" for i in range(100, 256)]
    for i in ips:
        ping(i)

创建用户密码

import subprocess
#生成随机密码
def suijishu(n=8):
    import random,string
    pwd=""
    for i in range(n):
        suiji = random.choice(string.digits+string.ascii_letters)
        pwd +=suiji
    return pwd
#查看用户是否存在
def useradd(user,pwd,fname):
    result=subprocess.run(f"id {user} &> /dev/null",shell=True)
    if result.returncode!=0:
        subprocess.run(f"useradd {user}",shell=True)
        subprocess.run(f"passwd --stdin {user} <<< {pwd}",shell=True)
        with open(fname,mode="a") as fw:
            fw.write(f"{user}:\t{pwd}\n")
    else:
        print(f"{user}:已经存在")
#循环创建用户写入文件
def main_m():
    user_list = [f"user{i}" for i in range(1, 10)]
    for i in user_list:
        useradd(i,suijishu(),"/mima.tt")
if __name__ == '__main__':
        main_m()

异常处理

try-except语句
try:
    n1 =int(input('number:' ))
    n2 = int(input('number:'))
    data=n1/n2
    print(data)
except ValueError:
    print("此处输入整数")
except ZeroDivisionError as e:
    print("reason:",e)
except (KeyboardInterrupt,EOFError):
    print("~bye")
    exit()#退出程序
except Exception as e: #兜底方案
    print(e)
print("ok")

异常

描述

NameError

未声明/初始化对象

IndexError

序列中没有此索引

SyntaxError

语法错误

KeyboardInterrupt

用户中断执行

EOFEror

没有内建输入,到达EOF标记

IOError

输入输出操作失败

你需要知道

1 使用shutil模块的copyfileobj方法,将/etc/hosts拷贝到/tmp目录下,目标文件名为zhuji

  1. import shutil

  1. withopen('/etc/hosts','rb') as src_fobj:

  1. withopen('/tmp/zhuji','wb') as dst_fobj:

  1. shutil.copyfileobj(src_fobj, dst_fobj)

2 使用shutil模块的copy方法,将/etc/hosts拷贝到/tmp目录下,目标文件名为zhuji2

  1. import shutil

  1. shutil.copy('/etc/hosts','/tmp/zhuji2')

3 使用shutil模块,将/etc/security目录拷贝到/tmp目录下,目标目录名为anquan

  1. import shutil

  1. shutil.copytree('/etc/security','/tmp/anquan')

4 通过time模块,显示当前时间:年月-月-日 时:分:秒

  1. >>> import time

  1. >>> time.strftime('%Y-%m-%d %H:%H:%S')

5 time.time()返回的是什么?

时间戳也就是1970年1月1日0点到执行time.time()之间的秒数。

6 写出异常处理的语法结构

try:

except():

else:

finally:

7 os.path模块有哪些判断路径的方法?

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

  • os.path.isfile(path):判断是否为文件

  • os.path.ismount(path):判断是否为挂载点

  • os.path.isdir(path):判断是否为目录

  • os.path.islink(path):判断是否为链接

  • os.path.exists(path):判断是否存在

8 pickle模块的主要作用和方法是什么?

主要作用是持久化存储数据处理

  • pickle.dump():用于将数据存入文件

  • pickle.load():用于将数据从文件中取出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

small white poplar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值