集合(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
import shutil
withopen('/etc/hosts','rb') as src_fobj:
withopen('/tmp/zhuji','wb') as dst_fobj:
shutil.copyfileobj(src_fobj, dst_fobj)
2 使用shutil模块的copy方法,将/etc/hosts拷贝到/tmp目录下,目标文件名为zhuji2
import shutil
shutil.copy('/etc/hosts','/tmp/zhuji2')
3 使用shutil模块,将/etc/security目录拷贝到/tmp目录下,目标目录名为anquan
import shutil
shutil.copytree('/etc/security','/tmp/anquan')
4 通过time模块,显示当前时间:年月-月-日 时:分:秒
>>> import time
>>> 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():用于将数据从文件中取出