本文共 4979 字,大约阅读时间需要 16 分钟。
应用程序是不能直接操作硬件的,应用程序需要通过OS操作硬件
f = open('C:\\Users\\86156\\Desktop\\test.txt','r',encoding='gbk') #用什么字符编码写的,就需要用什么字符编码读
操作文件的方法
掌握:
f.read() #读取所有内容,光标移动到文件末尾
f.readline() #读取一行内容,光标移动到第二行首部
f.readlines() #读取每一行内容,存放于列表中
f.write('1111\n222\n') #针对文本模式的写,需要自己写换行符
f.write('1111\n222\n'.encode('gbk')) #针对b模式的写,需要自己写换行符
f.writelines(['333\n','444\n']) #文件模式
了解:
f.readable() #文件是否可读
f.writable() #文件是否可读
f.closed #关闭文件
f.flush() #立刻将文件内容从内存刷到硬盘
f.name #查看打开的文件名
读方法r
8位1字节,1024bytes(字节)是1kb
f = open('C:/Users/86156/Desktop/test.txt','r',encoding='gbk')
data= f.read(4) #4是字符,不是字节
print(data)
f.close()
f =open('C:/Users/86156/Desktop/test.txt','r',encoding='gbk')
data=f.read() #读取光标右边所有字符
print(data)
f.close()
f = open('C:/Users/86156/Desktop/test.txt','r',encoding='gbk')
data=f.readline() #readline 按行读取
print(data)
f.close()
写方法w(覆盖)
f = open('C:/Users/86156/Desktop/test.txt','w',encoding='gbk')
f.write('啊啊啊,胜多负少') #覆盖原有内容
f.writelines(('a','d','s')) #把列表或者元组拼接成一行字符串写入文件中
f.close()
写方法a(不覆盖)
f.write('a a a a')
f.writelines(['s','t'])
f.close()
bytes 类型操作文件
a = '你好'.encode('gbk') #转码
print(a.decode('gbk')) #解码
f= open('C:/Users/86156/Desktop/test.txt','rb')
print(f.read().decode('gbk'))
f.close()
with 方式打开,不用手动关闭文件
0模式可以用在bytes 类型和字符类型,1,2模式只能用在bytes 类型下
常用汉字在gbk中占3个字节,生僻字占的更多
with open('C:/Users/86156/Desktop/test.txt','rb') asf:
f.seek(0) #把光标移动到开头
data=f.read()
print(data)
f.read(1)
f.seek(1,1) #1代表相对位置
print(f.read().decode('gbk'))
tail -f /var/log/message | grep '404'import time
with open(r'C:\Users\fengzi\Desktop\a.txt', 'r', encoding='utf-8') asf:
f.seek(0, 2)whileTrue:
data=f.readline()if '404' indata:
print(data)else:
time.sleep(0.05)
名称空间
py 文件名字不要跟导入的模块重名
py 文件可以当作模块导入
psutil 是一个资源监控模块
import psutil
内存
mem=psutil.virtual_memory()
print(mem)
cpu
cpu= psutil.cpu_percent(1)
print(cpu)
硬盘
disk= psutil.disk_usage(r'c:')
print(disk)
变量名和内存地址对应的表叫做名称空间
内置名称空间:(python 启动时就有,python 自带的)python 解释器内置的名字,print ,max,min
全局名称空间:(执行python 文件时启动,包括 if 判断得出的结果)定义的变量
局部名称空间:(调用函数时启动,调用结束失效)函数内部定义的变量
总结:三者的加载顺序
内置----->全局------->局部
三者的访问顺序
局部------->全局------>内置
def f1():
def f2():
def f3():
print(max)
f3()
f2()
f1()
利用yagmail 模块编写一个资源监控程序,并发送邮件
import yagmail
import psutil
def sendmail(subject,contents):
#连接邮箱服务器
yag= yagmail.SMTP(user='1850****602@163.com',password='X****3456',host='smtp.163.com')
#发送邮件
yag.send(to='1850****602@163.com',subject=subject, contents=contents)
#断开连接
yag.close()
def cpu_info():
cpu= psutil.cpu_percent(1)returncpu
def mem_info():
mem=psutil.virtual_memory()
total_mem= int(mem[0]/1024/1024)
free_mem= int(mem[1]/1024/1024)
percent_mem= mem[2]
used_mem= int(mem[3]/1024/1024)
mem_dict={'total_mem':total_mem,'free_mem':free_mem,'percent_mem':percent_mem,'used_mem':used_mem
}returnmem_dict
def disk_info():
disk= psutil.disk_usage(r'c:')
total_disk= int(disk[0]/1024/1024/1024)
used_disk= int(disk[1]/1024/1024/1024)
free_disk= int(disk[2]/1024/1024/1024)
percent_disk= disk[3]
disk_dict={'total_disk':total_disk,'used_disk':used_disk,'free_disk':free_disk,'percent_disk':percent_disk
}returndisk_dict
def main():
cpu=cpu_info()
mem=mem_info()
disk=disk_info()
msg= ''' cpu利用率:%s%%内存总大小:%sM
内存剩余大小:%sM
内存使用率:%s%%内存使用大小:%sM
硬盘总大小:%sG
硬盘使用大小:%sG
硬盘剩余大小:%sG
硬盘使用率:%s%%
'''% (cpu,mem.get('total_mem'),mem.get('free_mem'),mem.get('percent_mem'),mem.get('used_mem'),disk.get('total_disk'),disk.get('used_disk'),disk.get('free_disk'),disk.get('percent_disk'))
if cpu > 1:
print('cpu过高')
sendmail('cpu正在燃烧',msg)else:
print('cpu正常')if __name__ == '__main__':
main()
View Code
迭代器
什么时迭代器?
1.迭代器时一个重复的过程,即每一次重复为一次迭代
2.并且每次迭代的结果都是下一次迭代的初始值
l = [1,2,3]
count=0
while count
print(l[count])
count+=1
为什么要有迭代器?什么时可迭代对象?什么时迭代器对象?
1.为何要有迭代器
对于序列类型:字符串、列表、元组,我们可以使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖与索引的迭代方式,这就是迭代器
l1 = [1,2,3]
t1= (1,2,3)
str1= '123'num1= 100num2= 100.1s1= {1,2,3}
d1= {'name':'aaa','age':'bbb'}
f= open('mariadb.repo','r', encoding='utf-8')
# count=0#while count
# print(f[count])
# count+=1
2.为什么叫做可迭代对象? obj有 .__iter__方法的都叫做可迭代对象
l1 = [1,2,3]
t1 = (1,2,3)
str1 = '123'num1 = 100num2 = 100.1s1 = {1,2,3}
d1 = {'name':'aaa','age':'bbb'}
l1.__iter__()
t1.__iter__()
str1.__iter__()
s1.__iter__()
d1.__iter__()
f.__iter__()
文件 列表 字符串 集合 元组叫做可迭代对象
3.什么叫做迭代器对象? obj 有.__iter__和 .__next__方法的叫做迭代器对象
f.__next__()
f.__iter__()
只有文件是迭代器对象
res1 =iter(l1)
res2=iter(t1)
str3=iter(str1)
res4=iter(s1)
res5= iter(d1)
iter 变为迭代器对象
for 的作用:
1.把可迭代对象变为迭代器对象
2.过滤错误信息
# for i inl1:#iter(l1)
# print(i)
#for i innum1:
# print(i)
总结:迭代器对象一定是可迭代对象,而可迭代对象不一定是迭代器对象
装饰器
什么是装饰器?
在不改变源代码和调用方式的基础上给函数增加新的功能
def deco(func):#func =test
def wrapper():
func() #test() print('this is test func')
print('已经添加新功能')returnwrapper
def test():
print('this is test func')
test= deco(test) #test =wrapper
test() #wrapper()
生成器
什么是生成器?
只要函数里有yield 关键字,那么函数名()得到的结果就是生成器,生成器就是迭代器,并且不会执行函数内部代码
return 只能返回一个值,而 yield 可以返回多个值
生成器优点:
同一时间只储存一个值,节省空间
生成器缺点:
只能向后取值,不能向前取值
def test():for i in range(100):yieldi
res=test()for k inres:
print(k)
转载地址:https://blog.csdn.net/weixin_39609822/article/details/110380720 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!