python解释器文件后戳名_python文件处理、名称空间
发布日期:2021-09-12 18:30:24 浏览次数:1 分类:技术文章

本文共 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 模块编写一个资源监控程序,并发送邮件

ContractedBlock.gif

ExpandedBlockStart.gif

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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:请求到达时先经过过滤器还是拦截器_亿级数据过滤算法神器-布隆过滤器
下一篇:python教科书答案_python语言编程规范教材答案

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月13日 20时26分59秒