Python作业--4 (笔记整理篇)

*****装饰器下****

***inspect模块***

<inspect.getcallargs返回一个字典, key值为:形参, value值为对应的实参>

import functools
import inspect

def is_admin(fun):  # fun=add_student
    @functools.wraps(fun)
    def wrapper(*args, **kwargs): # kwargs = {'name':'root'}
        inspect_res = inspect.getcallargs(fun, *args, **kwargs)
        print("inspect的返回值: %s" %(inspect_res))

        if inspect_res.get('name') == 'root':
            temp = fun(*args, **kwargs)
            return temp
        else:
            print("not root/admin user, no permisson add student")   # 抛出异常
    return wrapper


@is_admin   # add_student = is_admin(add_student)
def add_student(name):   #
    print("添加学生信息.....")
add_student('redhat')


***多个装饰器***

<装饰规则:从下至上调用,从上至下装饰>

def decorator_a(func):
    print('Get in decorator_a')
    def inner_a(*args, **kwargs):
        print('Get in inner_a')
        return func(*args, **kwargs)
    return inner_a

def decorator_b(func):
    print('Get in decorator_b')
    def inner_b(*args, **kwargs):
        print('Get in inner_b')
        return func(*args, **kwargs)
    return inner_b



# 当有多个装饰器时, 从下到上调用装饰器;
@decorator_b   #  f =  decorator_b(inner_a)   # f = inner_b
@decorator_a   # f = decorator_a(f)    # f = inner_a
def f(x):
    print('Get in f')
    return x * 2

f(1)


***带参数的装饰器***

扫描二维码关注公众号,回复: 1661355 查看本文章
import functools
import time
import random
def addLog(type):   # type='warn'
    # type="warn"    Warn
    # type.title()
    def add_log(f):
        @functools.wraps(f)
        def wrapper(*args, **kwargs):
            start_time = time.time()
            res = f(*args, **kwargs)
            end_time = time.time()
            print("日志信息:[%s] [%s] %s 运行时间为%.5f s 运行结果为%s" %(
                type.title(),time.ctime(),f.__name__,end_time-start_time,res))
            return res
        return wrapper
    return add_log


@addLog("warn")   # hello = addLog(warn')
                        #  hello = add_log(hello)
                        # hello ======= wrapper()
def hello():
    time.sleep(random.random())
    return "hello"
@addLog(type="debug")
def add(x,y):
    time.sleep(random.random())
    return x+y

print(hello())
print(add(1,2))



****模块与包****



 ***模块分类***


    # - 内置模块 : random,sys,time,collections, functools, inspect

    # - 自定义模块: 自己写的模块;

    # - 第三方模块: pypi.python.org; itchat,qrcode


***写模块***

import sys
def test():
args = sys.argv
if len(args) == 1:
print 'Hello world'
elif len(args) == 2:
print 'Hello %s!' %args[1]
else:
print 'Too many arguments!'
if __name__ == '__main__':
test()

***模块调用***

> 当我们调用一个模块时,Python 会在指定的路径下搜索对应
的.py 文件;
> 默认情况下,Python 解释器会搜索当前目录、所有已安装的内置模

块和第三方模块,搜索路径存放在 sys 模块的 path 变量中;

>> 添加路径到默认搜索路径中;

# sys.path.append('xxx')

# sys.path.insert(0,'xxx')


***包***


包的创建:

创建一目录为包名;
在该文件夹下创建__init__.py文件存放包的信息,该文件
可以为空;
根据需要存放脚本文件,已编译的扩展及子包;
可以用import,import as,from import等语句导入模块

和包;


****文件操作****


***打开文件***

>>f=open('file')     默认已读的方式打开   结束要以f.close() 关闭文件

>>with语句  结束文件操作自行关闭

打开模式:

>>'r'   *只读 不可写  *不可创建新文件 *指针默认在开始

>>'r+'  *可读可写  *打开时不会清空文件内容  *不可创建新文件  *指针默认在开始

>>'w'  *只写 不可读  *打开时清空文件内容  *可以创建新文件  *指针默认在开始

>>'w+'  *可读可写  *打开时清空文件内容  *可以创建新文件  *指针默认在开始

>>'a'  *只写不可读  *打开时不会清空文件内容  *可以创建新文件  *指针默认在结尾

>>'a+'  *可读可读  *打开时不会清空文件内容  *可以创建新文件  *指针默认在结尾


***文件的读写***


读:#f.read() 读取文件所有内容  <加参数时读取相应字节>

#f.readline() 读取一行内容  <加参数时读取相应行内容>

#f.readlines() 读取文件所有内容 ,返回一个列表

#for 循环遍历

f = open("/root/Desktop/xxx")
print(f.read())
f.seek(0,0)
print('=============')
print(f.readline())
print(f.readline())
print(f.readline())
f.seek(0,0)
print('=============')
print(f.readlines())


写:#f.write() 写入内容

#f.writelines() 写入多个内容

f = open("/root/Desktop/xxx", 'a+')
li = ['user1', 'user2', 'user3']
f.write("hello")
f.writelines(['gcc\n', 'c++\n'])
f.writelines([line+"\n" for line in  li])
f.seek(0,0)
print(f.read())
f.close()



注:读文件和写文件都会使指针移动

#f.seek(x,x)移动指针

#f.tell()指针位置



***os模块文件名的操作***


import os



print(os.getcwd())#显示当前路径





print(os.path.splitext('hello.py'))#分离文件名和后缀
print(os.path.split('/home/aa/hello.py'))#分离路径和文件名

print(os.listdir('/var/log'))#显示该目录下所有内容


os.mknod('/tmp/westos')#创建文件

os.remove('/tmp/westos')#删除文件

os.mkdir('/tmp/westosdir')#创建目录


os.makedirs('/tmp/ok/westosdir')#创建多重目录


os.removedirs('/tmp/ok/westosdir')#删除目录



print(os.path.isfile("/etc/passwd"))#判断对象是否为文件
print(os.path.isabs("~/passwd"))#判断对象是否为绝对路径


print(os.path.exists('/etc/passwds'))#判断对象是否存在
print(os.path.exists('/mnt'))





print(os.path.sep)   #linex:/   windows:\



print(os.path.basename('/hello/hello.py'))#提取文件名

print(os.path.dirname('/hello/hello.py'))#提取目录




os.rename('/tmp/passwdok', '/mnt/passwdok')#重命名


文件操作练习:

# 题目:

# 创建文件/mnt/hello{1..8}.jpg   /mnt/westos{a..d}.py

# 修改所有的.jpg结尾的文件为/mnt/hello{1..8}.png;


#创建文件
import os
def creatfile(dirname):
    filea = ['hello' + str(i) + '.jpg' for i in range(1, 9)]
    fileb = ['westos' + str(i) + '.py' for i in range(1, 9)]
    for file in filea+fileb:
        filename=dirname+file
        if not os.path.exists(filename):
            os.mknod(filename)
            print('%s文件创建成功'%filename)
        else:
            print('%s文件创建失败'%filename)


#修改文件名

creatfile('/root/Desktop/')



def mod_filename(dirname,oldsuffix,newsuffix):
    if '.' not in oldsuffix:
        oldsuffix='.'+oldsuffix
    if '.' not in newsuffix:
        newsuffix='.'+newsuffix
    if os.path.exists(dirname):
        olddict=[filename for filename  in os.listdir(dirname) if filename.endswith(oldsuffix)]
        basename=[os.path.splitext(filename)[0] for filename in olddict]
        for filename in basename:
            dirname=os.path.abspath(dirname)+os.path.sep#找绝对路径
            old_name=dirname+filename+oldsuffix
            new_name=dirname+filename+newsuffix
            os.rename(old_name,new_name)
            print('%s重命名%s成功'%(old_name,new_name))

    else:
        print('%s目录不存在'%dirname)


mod_filename('/root/Desktop/','.py','.c')
print (os.listdir('/root/Desktop/'))


*********THE END*********

猜你喜欢

转载自blog.csdn.net/wl_python/article/details/80331578
今日推荐