19.5.9笔记and作业

笔记
移动平均生成器

def jisuan():
    get_num=0
    avg=0
    total=0
    count=1
    while True:
        get_num=yield avg
        total=total+get_num
        avg=total/count
        count+=1
b=jisuan()
next(b)
print(b.send(10))
print(b.send(20))
print(b.send(30))

写一个循环嵌套装饰器

import  time
def decore1(f):
    def haha():
        print('*')
        f()
        print('**')
    return haha
def decore2(f):
    def hehe():
        print('1#')
        f()
        print('2#')
    return hehe

@decore1
@decore2
def hanshu():
    print('hello')

hanshu()

写一个带有返回值的装饰器

def decore1(func):
    def haha(name,age):
        print('***')
        ret=func(name,age)
        print('*****')
        return ret
    return haha
@decore1
def hanshu(name,age):
    print(name,age)
    return name+str(age)
x=hanshu('刘德华',19)
print(x)

用property写一个计算圆的周长和面积

from math import pi
class Cirlce():
    def __init__(self,r):
        self.r=r
    def zhouchang(self):
        return pi*2*self.r
    def mianji(self):
        return pi*self.r*self.r
a=Cirlce(3)
print(a.mianji())
print(a.zhouchang())

eg:

f=open('d:\\a.txt','r')
x=f.read(10)#每行只读十个
while len(x)>0:
    print(x,end='###')
    x=f.read(10)
f.close()

eg:

a=[1,2,3,4,5]
f=open('d:b.txt','w')
i=0
while i<len(a):
    f.write(str(a[i])+'\n')##'\n'是换行
    i+=1
f.write('hello'+'\n')
f.write('haha')
f.close()

eg:

f=open('b.txt','r')
x=f.readline()
print(x,end='#')##print后面是带有‘\n’的,所以‘#’跟着换行符后面
x=f.readline()
print(x)
f.close()

用readline打印全部,用循环

f=open('b.txt','r')
x=f.readline()
while len(x)>0:
    print(x)
    x=f.readline()
f.close()

f=open('b.txt','r')
for x in f:
    print(x,end='')

.write(),.writelines()的使用,.writelines是一次性写入多行

f=open('b.txt','w')
f.write('你好')
a=['我好','哈哈']
f.writelines(a)
f.close()

使用with…as ,打开文件,不用再使用,.close()

with open('b.txt','r') as f:
    b=f.read()
    print(b)

写出read(),readline(),readlines()的区别,用with。。。。as写

with open('b.txt','r') as f:
    b=f.read(3)#默认读取全部,如果加参数的话,读取参数的个数
    print(b)
    c=f.readline()#只读取一行
    print(c)
    d=f.readlines()##读取全部内容,并且返回的是列表
    print(d)

##逐行打印

with open('b.txt','r') as f:
    count=0
    b=f.readline()
    while len(b)>=0:#判断每一行是否有字符
        if count<len(b):
            print(b[count])
        count += 1
        b = f.readline()

for循环:

with open('b.txt','r') as f:
    b=f.readlines()
    for i in range(len(b)):
        if i<len(b[i]):
            print(b[i][i])

eg:

with open('b.txt','r') as f:
    b=f.readlines()
    for i in range(len(b)):
        if i<len(b[i]):
            print(b[i][i])

import os

os.rename('b.txt','c.txt')##重命名
os.rename('c.txt','d:\\agg.txt')#移动
os.remove('b.txt')#移除
os.makedirs('gaga\\saff')#生成多级目录
os.mkdir('sfs')#生成单层目录

#输入一个字符串,生成该目录,用mkdir

a='a\\b\\c\\d\\e'
 dl=a.split('\\')##split生成的是列表
mulu=''
for x in a:
    mulu=mulu+x
    if not os.path.exists(mulu):
        os.mkdir(mulu)
        mulu += '\\'#添加反斜杠

os.rmdir(’’)#删除单层空目录
os.removedirs(‘a\b\c\d\e’)#删除多级目录

删除a-e的包,不用removedirs

a='a\\b\\c\\d\\e'
while len(a)>0:
    if os.path.exists(a):
        os.rmdir(a)
    x=a.rfind('\\')
    a=a[:x]

获取当前列表os.getcwd()
获取目录列表os.listdir

改变当前列表

b=os.getcwd()
print(b)
b=b+'\\venv'
os.chdir(b)
print(os.getcwd())

判断是文件还是目录

b=os.path.isdir('b1')
print(b)
c=os.path.isfile('day24.py')
print(c)

获取绝对路径

b=os.path.abspath('day24.py')
print(b)
c=os.path.isabs()#判断是不是绝对路径
a=os.path.basename('D:\pywork\day24.py')##获取路径最后一部分
print(a)
a=os.path.dirname()#获取路径中的路径,就是出去最后面的部分

作业
1.自定义创建目录方法

a='a\\b\\c\\d\\e'
b=a.split('\\')
mulu=''
for x in b:
    mulu+=x
    if not  os.path.exists(mulu):
        os.mkdir(mulu)
        mulu+='\\'
os.removedirs('a\\b\\c\\d\\e')

2.用户输入文件名以及开始搜索的路径,搜索该文件是否存在,如遇到文件夹,则进入文件夹继续搜索

sys.setrecursionlimit(1000)  # set the maximum depth as 1500
def file_find(file_path, file_name):
    if os.path.isdir(file_path):
        # os.chdir(file_path)#进入当前路径
        file_list = os.listdir(file_path)
        for each in file_list:
            temp_dir = file_path + os.sep + each
            if os.path.isdir(temp_dir):
                ##递归
                temp = file_find(temp_dir, file_name)
                if temp == True:
                    return True
            elif os.path.isfile(temp_dir) and each == file_name:
                return True
        # os.chdir('..') #没找到文件,退回上一个目录
        return False
    else:
        print('{}不是一个目录'.format(file_path))
  1. 通过给定的文件夹, 列举出这个文件夹当中, 所有的文件,以及文件夹, 子文件夹当中的所有文件
def listFilesToTxt(dir, file):
        file_list = os.listdir(dir)
        for file_name in file_list:
            new_fileName = dir + "/" + file_name
            # 判定, 是否是目录, listFiles
            if os.path.isdir(new_fileName):
                # print(new_fileName)
                file.write(new_fileName + "\n")
                listFilesToTxt(new_fileName, file)
            else:
                # 打印下, 文件名称
                # print("\t" + file_name)
                file.write("\t" + file_name + "\n")
            # print("")
        file.write("\n")
    
    
    f = open(os.getcwd() + "\\list.txt", "a", encoding='utf-8')
    listFilesToTxt(os.getcwd() + "\\dir", f)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值