#/usr/bin/env python
#import datetime
#import time
#def logger(fn):
# def wrap(*args,**kwargs):
# #before
# print("args={},kwargs={}".format(args,kwargs))
# start = datetime.datetime.now()
# ret = fn(*args,**kwargs)
# #after
# #print(ret)
# delta = (datetime.datetime.now()-start).total_seconds()
# if delta > 2:
# print("{} took {}s".format(fn.__name__,delta))
# return ret
# return wrap
#@logger # 相当于add = logger(add)
#def add(x,y):
# time.sleep(10)
# return x + y
##foo = logger(add)
##print(foo(4,6))
##add = logger(add) #return wrap,wrap = 增强的fn
#print(add(x = 4,y = 6))
#import datetime
#import time
#def logger(fn):
# def wrap(*args,**kwargs):
# print("args={},kwargs={}".format(args,kwargs))
# start = datetime.datetime.now()
# ret = fn(*args,**kwargs)
# delta = (datetime.datetime.now() - start).total_seconds()
# if delta > 2:
# print("{} token {}'s".format(fn.__name__,delta))
# return ret
# return wrap
#@logger
#def add(x,y):
# time.sleep(5)
# return x+y
#print(add(4,5))
#ls功能代码实现
#from pathlib import Path
#import argparse
#import datetime
#import stat
#def listdir(path=".",all=False,detail=False,human=False):
# def _convert_mode(mode:int):
# modelist = ['r', 'w', 'x', 'r', 'w', 'x', 'r', 'w', 'x']
# modestr = bin(mode)[-9:] # '110110100'
# ret = ""
# for i,c in enumerate(modestr):
# if c == '1':
# ret += modelist[i]
# else:
# ret += '-'
# return ret
# # -d -s p l c b
# def _convert_type(file:Path):
# if file.is_symlink():
# ret = '1'
# elif file.is_fifo():
# ret = 'p'
# elif file.is_socket():
# ret = 's'
# else:
# ret = '-'
# return ret
# def _get_human(size:int):
# units = ['','K','M','G','T','P'] #" KMGTP"
# depth = 0
# while size >= 1024:
# size = size//1024
# depth += 1
# return ("{}{}".format(size,units[depth]))
# def _showdir(path='.',all=False,detail=False,human=False):
# p = Path(path)
# for file in p.iterdir():
# if not all and str(file.name).startswith('.'): # .开头 不打印 --all
# continue
# # -l
# if detail:
# st = file.stat()
# # -rw-rw-r-- l python python 2920 Sep 21 07:30 ips
# h = str(st.st_size)
# if human:
# h = _get_human(st.st_size)
# yield (stat.filemode(st.st_mode),st.st_nlink,st.st_uid,st.st_gid,h,
# datetime.datetime.fromtimestamp(st.st_atime).strftime('%Y-%m-%d %H:%M:%S'),file.name)
# else: #没有 -l
# yield (file.name,)
# yield from sorted(_showdir(args.path,args.all,args.l,args.h),key=lambda x: x[len(x)-1])
##ls [path] [-l] [-a] [-h]
#parser = argparse.ArgumentParser(prog='ls',add_help=False,description='list all files') #构造解析器
#parser.add_argument('path',nargs='?',default='.',help='path help') # 位置参数
#parser.add_argument('-l',action='store_true')
#parser.add_argument('-h',action='store_true')
#parser.add_argument('-a','--all',action='store_true')
#if __name__ == '__main__':
# args = parser.parse_args()
# parser.print_help()
# print('args=',args)
# for st in listdir(args.path,args.all,args.l,args.h):
# print(st)
#class MyClass:
# """A example class"""
# x = 'abc' #类属性
# def __init__(self):#初始化(方法、函数、构造函数)
# print('init') #如果没定义,则隐式定义,返回值为pass
# def foo(self): #类属性foo,也是类方法
# return "foo = {}".format(self.x)
#a = MyClass()#实例化,初始化
#print(a.foo())
#class person:
# x = 'abc'
# def __init__(self,name,age=18):
# self.name = name
# self.age = age
# def showage(self,x,y):
# print('{} is {}'.format(self.name,self.age),x,y)
# self.y = x
# person.x = x
#tom = person('tom',32) #实例化
#jerry = person('jerry',21)
#print(id(tom))
#print(id(person('tom',32)))
#print(tom.name,tom.age)
#print(jerry.name,jerry.age)
#print(tom.x,jerry.x)
#print('--------------------')
#tom.showage(100,'a')
#print(tom.y)
#print(person.x)
#jerry.showage(200,'d')
#print(jerry.y)
#print(person.x)
#person.x = 'fdsfsd'
#print(tom.x,jerry.x)
#print(person.__dict__)
#print(tom.__class__,jerry.__class__)
#print(tom.__class__.__name__,jerry.__class__.__name__)
#print(tom.__dict__)
#print(jerry.__dict__)
#print(tom.__dict__['name'])
#class Person:
# height = 180
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def showper(self,x,y):
# print("{} is {}".format(self.name,self.age))
# self.sex = y
# Person.height = x
#Tom = Person('tom',22)
#Jerry = Person('jerry',43)
#print(Tom.name,Tom.age)
#print(Jerry.name,Jerry.age)
#print(Person.__dict__)
#print("-------------------")
#Tom.showper(188,"male")
#print(Tom.sex)
#print(Person.height)
#Jerry.showper(165,"female")
#print(Jerry.sex)
#print(Person.height)
#print("------------")
#print(Person.__dict__)
#print(Tom.__dict__)
#print(Jerry.__dict__)
#print("----------------")
#print(Person.__class__)
#print(Tom.__class__)
#print(Jerry.__class__)
#print("-------------")
#print(Person.__class__.__name__)
#print(Tom.__class__.__name__)
#print(Jerry.__class__.__name__)
#print("---------------")
#print(Person.__class__.__doc__)
#print(Tom.__class__.__doc__)
#print(Jerry.__doc__)
#类以及实例的变量访问
#class Person:
# age = 3
# height = 170
# def __init__(self,name,age=18):
# self.name = name
# self.age = age
#Tom = Person('tom') #实例化
#Jerry = Person('jerry',21)
##Person.age = 30
#print(Person.age,Tom.age,Jerry.age)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#print(Person.height,Tom.height,Jerry.height)
#Person.height += 20
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#Tom.height = 168
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#Jerry.height += 30
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#Person.weight = 70
#print(Person.weight,Tom.weight,Jerry.weight)
#print(Person.__dict__['weight'])
#print(Tom.weight)
#类装饰器
#def setnameproperty(name):
# def wrapper(cls):
# cls.NAME = name
# return cls
# return wrapper
#@setnameproperty('Tom') # Person = stenameproperty("Tom")(Person)
#class Person:
# AGE = 5
#print(Person.NAME)
#print(Person.AGE)
#class tracer:
# def __init__(self,func):
# self.calls = 0
# self.func = func
# def __call__(self,*args):
# self.calls += 1
# print('call %s to %s' %(self.calls, self.func.__name__))
# self.func(*args)
#@tracer # spam = tracer(spam)
#def spam(a, b, c):
# print(a + b + c)
#spam(1,2,3)
#class tracer:
# def __init__(self, *args):
# self.calls = 0
# self.args = args
# def __call__(self, func):
# self.func = func
# def realfunc(*args):
# self.calls += 1
# print('call %s to %s' %(self.calls, self.func.__name__))
# print (self.func(*args))
# print(*self.args)
# return realfunc
#@tracer("fdfds")
#def spam(a, b, c):
# return a + b + c
#spam(1,2,3)
#面向对象类方法以及静态方法
#class Person:
# HEIGHT = 122
# def __init__(self,name,HEIGHT):
# self.name = name
# self.HEIGHT = HEIGHT
# def normal_method():
# print('nornal')
# def method(self):
# print("{0.name}'s method".format(self))
# @classmethod
# def class_method(cls):
# print('class = {0.__name__} ({0})'.format(cls))
# cls.HEIGHT += 10
# @staticmethod
# def static_methd():
# print(Person.HEIGHT)
#print('~~~~~类访问~~~~~~~~~~')
#print("1",Person.normal_method())
#print("--------------")
##print("2",Person.method())
##print("3",Person.class_method())
#print("4",Person.static_methd())
#print("--------------")
#print(Person.__dict__)
#print('~~~实例访问~~~~~~~~~~~')
#print('tom---')
#tom = Person("tom",1333)
##print("1",tom.normal_method())
#print("2",tom.method())
#print("3",tom.class_method())
#print("4",tom.static_methd())
#print('jerry---')
#jerry = Person("jerry",111)
##print("1",jerry.normal_method())
#print("2",jerry.method())
#print("3",jerry.class_method())
#print("4",jerry.static_methd())
#class Dog(object):
# def __init__(self, name):
# self.name = name
# @staticmethod # 属于类的一种方法,但无法访问类或实例的属性
# def eat(self, food):
# print("%s is eating %s" % (self.name, food))
# def talk(self):
# print("%s is talking." % self.name)
#dog = Dog("Tom")
## 当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self
##dog.eat("Apple")
## TypeError: eat() missing 1 required positional argument: 'food'
## 正确的姿势
#dog.eat(dog, "Apple")
#类继承
#class Parent: # 定义父类
# parentAttr = 100
# def __init__(self):
# print ("调用父类构造函数")
# def parentMethod(self):
# print ('调用父类方法')
# def setAttr(self, attr):
# Parent.parentAttr = attr
# def getAttr(self):
# print ("父类属性 :", Parent.parentAttr)
#class Child(Parent): # 定义子类
# def __init__(self):
# print ("调用子类构造方法")
# def childMethod(self):
# print ('调用子类方法')
#c = Child() # 实例化子类
#c.childMethod() # 调用子类的方法
#c.parentMethod() # 调用父类方法
#c.setAttr(200) # 再次调用父类的方法 - 设置属性值
#c.getAttr()
#方法重写
#class Parent:
# def myMethod(self):
# print("parent's method!")
# def mMethod(self):
# print("43432")
#class Child(Parent):
# def myMethod(self):
# print("child's method!")
#c = Child()
#c.myMethod()
#c.mMethod()
#访问控制--私有变量
#class Person:
# __age = 11
# def __init__(self,name,age=18):
# self.name = name
# self.__age = age
# def growup(self,incr = 1):
# if 0 < incr <150:
# self.__age += incr
# def getage(self):
# return self.__age
#Tom = Person('tom')
#Tom.growup(2)
#print(Tom.getage())
#print(Tom._Person__age)
#print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())
#Tom.age = 2000
#print(Tom.getage())
#print(Tom.age)
#私有成员---私有变量,私有方法
#class Person:
# def __init__(self,name,age=18):
# self._name = name
# self.__age = age
# def __growup(self,incr = 1):
# if 0 < incr <150:
# self.__age += incr
# def __getname(self):
# return self._name
# def __getage(self):
# return self.__age
#Tom = Person('tom')
##Tom.growup(2)
#print(Tom._Person__getage())
##Tom._name = 'jerry'
#print(Tom._name)
#print(Tom._Person__getname())
#print(Person.__dict__)
##print(Tom.__dict__)
##Tom._Person__age = 200
##print(Tom.getage())
#import sys
#import os
#debug = True
#class FooClass(object):
# "Foo class"
# pass
#def test():
# "test function"
# foo = FooClass()
# if debug:
# print ('run test()')
#if __name__ == '__main__':
# test()
#print(FooClass.__dict__)
#for i in range(-3,4):
# if i < 0:
# n = -i
# print(" "*n + "*" * (7-2*n))
# elif i == 0:
# print("*"*7)
# else:
# n = i
# print(" "*n + "*" *(7-2*n))
#print("----------")
#for i in range(-3,4):
# if i < 0:
# n = -i
# print(" "*n + "*" * (4-n))
# elif i == 0:
# print("*"*7)
# else:
# n = i
# print(" "* + "*" *(4-n))
#判断文件是否存在,存在打开。并连续写入保存记忆关闭
#import os
#import os.path
#if os.path.exists("C:/Users/lee/Desktop/helloworld"):
# f1 = open("C:/Users/lee/Desktop/helloworld", "a+")
#while True:
# line = input("Enter something:")
# if line == "q" or line == "quit":
# break
# f1.write(line+"\n")
#f1.close()
#嵌套函数
#1
#x = 6
#z = "global"
#def f1():
# x = "from f1"
# y = 3
# print(x,z)
# def f2():
# x = "from f2"
# print(x,y)
# f2()
##2
#def f1():
# x = 3
# def f2():
# y = "hello"
# print(x,y)
# return f2
#f1() #返回的是f2(是一个函数对象)
#a1 = f1() #a1指向f2(a1是一个函数引用)
#type(a1) #function
#a1() #调用f2()
#类和对象
#'''
#定义一个学生类,用来形容学生
#'''
#class Student():
# #一个空类,pass代表直接跳过
# #此处pass必须有
# pass
##定义一个对象
#mingyue = Student()
##再定义一个类,用来描述听Python的学生
#class PythonStudent():
# #用None给不确定的值赋值
# name = None
# age = 18
# course = "Python"
# #需要注意
# #1.def doHomework的缩进层级
# #2.系统默认出一个self参数
# def doHomework(self,user,ages):
# self.user = user
# self.ages = ages
# #推荐在函数末尾使用return语句
# return None
##实例化一个叫yueyue的学生,是一个具体的人
#yueyue = PythonStudent()
#print(yueyue.name)
#print(yueyue.age)
#print(yueyue.__dict__)
#print("*"*10)
##注意成员函数的调用没有传递进入参数
#yueyue.doHomework("liuyifei",18)
#print(yueyue.user)
#print(yueyue.ages)
#print(PythonStudent.name)
#print(PythonStudent.age)
#print(PythonStudent.__dict__)
#print(yueyue.__dict__)
#class Wife():
# name = "刘亦菲"
# age = 18
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def family(self,husband):
# self.husband = husband
# #Student.name = name
#yifei = Wife("yifei",18)
#print(yifei.name)
#print(yifei.age)
#yifei.family("lifei")
#print(yifei.husband)
#print(Wife.name)
#print("*"*10)
#print(yifei.__class__.name)
#print(yifei.__class__.age)
#class A():
# name = "liuyifei"
# age = 18
# def __init__(self):
# self.name = "aaa"
# self.age = 100
# def sing(self):
# print("我的名字是{0},今年{1}岁了!".format(self.name,self.age))
#class B():
# name = "lifei"
# age = 18
#a = A()
#print(a.name)
#print(a.age)
#a.sing()
#A.sing(A)
#print("*"*10)
#A.sing(B)
#私有变量,公有变量
#class Person():
# #name是公有变量
# name = "feifei"
# #__age是私有变量
# __age = 18
#P = Person()
#print(P.name)
#print(P._Person__age)
#P._Person__age = 20
#print(P._Person__age)
#封装
#继承
#class A():
# name = "liuyifei" #公有变量
# __age = 18 #私有变量
# _petname = "xixi" #受保护的,但不能公用
# def __init__(self):
# #self.name = "aaa"
# #self.age = 100
# pass
# def __work(self): #私有方法
# self.work = "actor"
# def sing(self):
# print("我的名字是{0},今年{1}岁了!".format(self.name,self.__age))
#class B(A):
# def sing(self):
# #A.sing(self) #方法扩展
# #super().sing()
# print("hello") #如果没有上面两个中的一个,则为方法重写
# pass
#b = B()
#print(b.name)
#print(b._A__age)
#b.sing()
#print(B.name)
#print(b._petname)
#b._A__work()
#print(b.work)
#class Fish():
# def __init__(self,name):
# self.name = name
# def swim(self):
# print("i am swiming...")
#class Bird():
# def __init__(self,name):
# self.name = name
# def fly(self):
# print("i am flying...")
#class Person():
# def __init__(self,name):
# self.name = name
# def work(self):
# print("i am working...")
##单继承
#class Student(Person):
# def __init__(self,name):
# self.name = name
# def study(self):
# print("i am studying...")
##多继承
#class SuperMan(Person,Bird,Fish):
# def __init__(self,name):
# self.name = name
#class SwimMan(Person,Fish):
# def __init__(self,name):
# self.name = name
#st = Student("feifei")
#st.study()
#st.work()
#print("*"*20)
#s = SuperMan("yifei")
#s.fly()
#s.swim()
#s.work()
#构造函数自动调用
#class A():
# '''
# 构造函数自动调用
# '''
# def __init__(self,name):
# self.name = "yiffei"
# self.age = 18
# print("IN init func")
#class B(A):
# #def __init__(self,name):
# #print("B")
# #print(name)
# pass
#class C(B):
# def __init__(self,name):
# B.__init__(self,name)
# print("wo shi c")
#c = C("woshicccc")
#b = B("wwww")
#Mixin案例
#class Person():
# name = "liuyifei"
# age = 18
# def eat(self):
# print("eating....")
# def drink(self):
# print("drinking.....")
# def sleep(self):
# print("sleeping...")
#class Teacher(Person):
# def work(self):
# print("working.....")
#class Student(Person):
# def study(self):
# print("studying....")
#class Tutor(Teacher,Student):
# pass
#t = Tutor()
#print(Tutor.__mro__)
#print(t.__dict__)
#print(Tutor.__dict__)
#print("*"*20)
#class TeacherMixin():
# def work(self):
# print("work")
#class StudentMixin():
# def study(self):
# print("study")
#class TutorMixin(Person,TeacherMixin,StudentMixin):
# pass
#定义一个Person类,具有name,age属性
#对于任意输入的姓名,我们希望都用大写方式保存
#年龄,我们希望内部同一用整数保存
#x = property(fget,fset,fdel,doc)
#class Person():
# '''
# 这是一个关于人的类
# '''
# #函数的名称可以任意
# def fget(self):
# return self._name
# def fget1(self):
# return self._age
# def fset(self,name):
# #所有输入的姓名以大写形式保存
# self._name = name.upper()
# def fset1(self,age):
# #所有输入的年龄以整数保存
# self._age = int(age)
# def fdel(self):
# self._name = "NoName"
# self._age = 100
# name = property(fget, fset, fdel, "对name进行如下操作")
# age = property(fget1, fset1, fdel, "对age进行如下操作")
#p1 = Person()
#p1.name = "feifei"
#p1.age = 18.7
#print(p1.__dict__)
#print(p1._name)
#print(p1._age)
#print(Person.__doc__)
#print(Person.__name__)
#print(Person.__bases__)
#__getattr__案例
#class A():
# name = "feifei"
# age = 11
# def __getattr__(self,name):
# #print("NO attr")
# #print(name)
# return "NO attr",name
#a = A()
#print(a.name)
#print(a.addr)
#__setattr__案例
#class A():
# def __init__(self):
# pass
# def __setattr__(self, name, value):
# print("设置属性:{0}".format(name))
# #下面语句会导致问题,死循环
# #self.name = value
# #此种情况,为了避免死循环,规定统一调用父类魔法函数
# super().__setattr__(name, value)
#a = A()
#print(a.__dict__)
#a.age = 18
#__gt__案例
#class Student():
# def __init__(self, name):
# self._name = name
# def __gt__(self, obj):
# #print("哈哈,{0}会比{1}大吗?".format(self, obj.))
# print("哈哈,{0}会比{1}大吗?".format(self._name, obj._name))
# return self._name > obj._name
#stu1 = Student("one")
#stu2 = Student("two")
#print(stu1 > stu2)
#class Person():
# def eat(self):
# print(self)
# print("Eating")
# @classmethod
# def play(cls):
# print(cls)
# print("Playing...")
# @staticmethod
# def say():
# print("Saying...")
#feifei = Person()
#feifei.eat()
#Person.play()
#feifei.play()
#Person.say()
#feifei.say()
#class A():
# def __init__(self):
# self.name = "feifei"
# self.age = 18
#a = A()
#a.name = "feifeiiei"
#print(a.name)
#del a.name
##print(a.name)
#class A():
# def __init__(self):
# self.name = "feifei"
# self.age =18
# def fget(self):
# print("我被读取了")
# return self.name
# def fset(self, name):
# print("我被写入了,但是还可以做好多事情")
# self.name = "飞飞" + name
# def fdel(self):
# pass
# name2 = property(fget, fset, fdel, "这是一个property的例子")
#a = A()
#print(a.name)
#print(a.name2)
#class A():
# def __init__(self):
# self.name = "feifei"
# self.age =18
# def fget(self):
# print("我被读取了")
# return self.name
# def fset(self, name):
# print("我被写入了,但是还可以做好多事情")
# self.name = "飞飞" + name
# def fdel(self):
# pass
# name2 = property(fget, fset, fdel, "这是一个property的例子")
#a = A()
#print(a.name)
#print(a.name2)
##抽象类的实现
#import abc
##声明一个类并且指定当前类的元类
#class Human(metaclass = abc.ABCMeta):
# #定义一个抽象的方法
# @abc.abstractmethod
# def smoking(self):
# pass
# #定义类抽象方法
# @abc.abstractclassmethod
# def drink():
# pass
# #定义静态抽象方法
# @abc.abstractstaticmethod
# def play():
# pass
# def sleep(self):
# print("Sleeping....")
##自己组装一个类
#class A():
# pass
#def say(self):
# print("Saying....")
#say(9)
#A.say = say
#a = A()
#a.say()
##例子-2
##自己组装一个类
#from types import MethodType
#class A():
# pass
#def say(self):
# print("Saying....")
#a = A()
#a.say = MethodType(say,A)
#a.say()
##利用type制造一个类
##先定义类应该具有的成员函数
#def say(self):
# print("Saying....")
#def talk(self):
# print("Talking...")
##用type来创建一个类
#A = type("AName", (object, ), {"class_say":say, "class_talk":talk})
##然后可以像正常访问一样使用类
#a = A()
#a.class_say()
#a.class_talk()
##元类演示
##元类写法是固定的,它必须继承自type
##元类一般命名以MetaClass结尾
#class TulingMetaClass(type):
# #注意以下写法
# def __new__(cls, name, bases, attrs):
# #自己的业务处理
# print("哈哈,我是元类")
# attrs['id'] = '000000'
# attrs['addr'] = "北京海淀区公主坟西翠路12号"
# return type.__new__(cls, name, bases, attrs)
##元类定义完就可以使用,使用注意写法
#class Teacher(object, metaclass=TulingMetaClass):
# pass
#t = Teacher()
#print(t.id)
#print(t.addr)
#print(t.__dict__)
#写一个模块
#包含一个学生类
#一个sayHello函数
#一个打印语句
#class Student():
# def __init__(self, name="NoName", age=19):
# self.name = name
# self.age = age
# def intd(self):
# print("My name is {0},{1} years old".format(self.name,self.age))
#def sayHello():
# print("Hi,welcome!")
##此判断语句建议一直作为程序的入口
#if __name__ == '__main__':
# print("我是模块Student")
#异常处理
#try:
# num = int(input("Plz input your number:"))
# rst = 100/num
# print("计算结果是{0}".format(rst))
#except ZeroDivisionError as e:
# print("输入错了")
# print(e)
# exit()
#except NameError as e:
# print("名字起错了")
# print(e)
# exit()
#except AttributeError as e:
# print("好像属性问题")
# print(e)
# exit()
#except ValueError as e:
# print("值错误")
# print(e)
# exit()
##下面这句话是最后一个错误exception
#except Exception as e:
# print("我也不知道")
# print(e)
#else:
# print("good!")
#finally:
# print("牛逼")
##用户手动触发异常
##当某些情况,用户希望自己引发一个异常的时候,可以使用
##raise关键字来引发异常
#try:
# print("hello!")
# print("guys")
# #手动引发一个Name异常
# #注意语法:raise ErrorClassName
# raise NameError('HiThere')
#except NameError:
# print('An exception flew by!')
# #raise
#except ValueError as e:
# print("ValueError")
#except Exception as e:
# print("有异常")
#else:
# print("All right")
#finally:
# print("I am coming")
##案例2
##自己定义异常
##需要注意:自定义异常必须是系统资产的子类
#class FlyNameError(NameError):
# pass
#try:
# print("hello!")
# print("guys")
# #手动引发一个Name异常
# #注意语法:raise ErrorClassName
# raise FlyNameError('HiThere')
#except NameError:
# print('NameError')
# #raise
#except FlyNameError as e:
# print("FlyNameError")
#except ValueError as e:
# print("ValueError")
#except Exception as e:
# print("有异常")
#else:
# print("All right")
#finally:
# print("I am coming")
#####常用模块
##calendar
#import calendar
##calendar:获取一年的日历字符创
##参数
##w = 每个日期之间的间隔字符数
##l = 每周所占用的行数
##c = 每个月之间的间隔字符数
#cal = calendar.calendar(2018)
#print(type(cal))
##print(cal)
#cal = calendar.calendar(2018,w=1,l=0,c=10)
#print(cal)
##isleap:获取某一年是否闰年
#calendar.isleap(2000)
##leapdays:获取指定年份之间的闰年的个数
#calendar.leapdays(1998,2018)
##mouth():获取某个月的日历字符串
##格式:calendar.month(年,月)
##返回值:月日历的字符串
#m3 = calendar.month(2018,3)
#print(m3)
##monthrange():获取一个月的周几开始和天数
##格式:calendar.monthrange(年,月)
##返回值:元组(周几开始,总天数)
##注意:周默认0-6表示周一到周日
#t = calendar.monthrange(2018,5)
#print(t)
##monthcalendar():返回一个月每天的矩阵列表
##格式:calendar.monthcalendar(年,月)
##返回值:二级列表
##注意:矩阵中没有天数用0表示
#m = calendar.monthcalendar(2018,5)
#print(m)
##prcal:print calendar直接打印日
#calendar.prcal(208)
##prmonth():直接打印整个月的日历
##格式:calendar》prmonth(年,月)
##返回值:无
#calendar.prmonth(2018,5)
##time模块
##时间戳
##UTC时间
##夏令时
##时间元组:包含时间内容的普通元组
#import time
##时间模块的属性
##timeone:当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区是-28800
##altzone:获取当前时区与UTC时间相差的秒数,在有夏令时的情况下,东八区是-32400
##daylight:测当前是否是夏令时的时间状态
##print(time.timezone)
##print(time.altzone)
##print(time.daylight)
##得到时间戳
##print(time.time())
##localtime,得到当前时间的时间结构
##可以通过点操作得到相应的属性元素的内容
##t = time.localtime()
##print(t)
##asctime():返回元祖的正常字符化之后的时间格式
##格式:time.asctime(时间元组)
##返回值:字符串 Sat May 19 17:53:31 2018
##tt = time.asctime(t)
##print(tt)
##print(type(tt))
##ctime:获取字符串化的当前时间
##t1 = time.ctime()
##print(t1)
##mktime():使用时间元组获取对应的时间戳
##格式:time.mktime(时间元组)
##返回值:浮点数时间戳
##t2 = time.localtime()
##t3 = time.mktime(t2)
##print(t3)
##clock:获取cpu时间,3.0-3.3版本直接使用,3.6调用有问题
##sleep:是程序进入休眠状态,n秒之后继续
##for i in range(10):
## print(i)
## time.sleep(1)
#'''def p():
# time.sleep(2.5)
#t0 = time.clock()
##p()
#time.sleep(3)
#t1 = time.clock()
#print(t1 - t0)'''
##strftime:将时间元组转化为自定义的字符串格式
##把时间表示成 2018 5.19 18:11
#t = time.localtime()
#ft = time.strftime("%Y%m%d %H:%M", t)
#print(ft)
##datetime模块
##-datetime提供日期和时间的运算和表示
#import datetime
##datetime常见属性
##datetime.date: 一个理想化的日期,提供year,month,day属性
#'''t = datetime.date(2018,5,19)
#print(t)
#print(t.year)
#print(t.month)
#print(t.day)'''
##datetime.time:提供一个理想化的时间,提供hour,minute,second,microsecond等内容
#'''t1 = datetime.time(18,39,30,20)
#print(t1)
#print(t1.hour)
#print(t1.minute)
#print(t1.second)
#print(t1.microsecond)'''
##datetime.datetime:提供日期跟时间的结合
#from datetime import datetime
##常用类方法
##today
##now
##utcnow
##fromtimestamp
#'''dt = datetime(2018,5,19)
#print(dt.today())
#print(dt.now())
#print(dt.utcnow())'''
##datetime.timedelta:提供一个时间差,时间长度
#from datetime import datetime,timedelta
##t3 = datetime.now()
##print(t3)
##print(t3.strftime("%Y-%m-%d %H:%M:%S"))
##t4 = timedelta(hours = 1)
##当前时间加上时间间隔后,把得到的一个小时后的时间格式化输出
##print((t3+t4).strftime("%Y-%m-%d %H:%M:%S"))
##timeit:时间测量工具
##测量程序运行时间间隔实验
#'''def p():
# time.sleep(3)
#t1 = time.time()
#p()
#print(time.time() - t1)'''
##生成列表两种方法的比较
##如果单纯生成一个列表的时间,可能很难实现
#import timeit
#'''
#c = '''
#sum = []
#for i in range(1000):
# sum.append(i)
#'''
##利用timeit调用代码,执行10000次,查看运行时间
#t1 = timeit.timeit(stmt="[i for i in range(1000)]",number=10000)
##测量代码c执行10000次运行的结果
#t2 = timeit.timeit(stmt=c,number=10000)
#print(t1)
#print(t2)
#'''
##timeit 可以执行一个函数,来测量一个函数的执行时间
#'''
#f doIt():
# num = 3
# for i in range(num):
# print("Repeat for {0}".format(i))
##执行函数,重复10次
#t = timeit.timeit(stmt=doIt,number=10)
#print(t)
#'''
#s = '''
#def doIt():
# num = 3
# for i in range(num):
# print("Repeat for {0}".format(i))
#'''
##执行doIt(num)
##setup负责把环境变量准备好
##实际相当于给timeit创造了一个小环境
##在创造的小环境中,代码执行的顺序大致是:
##def doIt(num):
## ....
##num = 3
##doIt(num)
#t = timeit.timeit("doIt()",setup=s+"num=3",number=10)
#print(t)
#os-操作系统相关
#主要是文件操作
#和操作系统相关的操作,主要包含三个模块
#-os,操作系统目录相关
#-os.path,系统路径相关操作
#-shutil,高级文件操作,目录树的操作,文件赋值,删除,移动
#-路径:
#-决定路径:总是从根目录上开始
#-相对路径:基本上以当前环境为开始的一个相对的地方
#os模块
#getcwd():获取当前的工作目录
#格式:os.getcwd()
#返回值:当前工作目录的字符串
#当前工作目录就是程序在进行文件相关操作,默认查找文件的目录
'''
import os
mydir = os.getcwd()
print(mydir)
'''
#chdir():改变当前的工作目录
#change directory
#格式:os.chdir(路径)
#返回值:无
'''
os.chdir('C:/Users/lee')
mydir = os.getcwd()
print(mydir)
'''
#listdir():获取一个目录中所有子目录和文件的名称列表
#格式:os.listdir(路径)
#返回值:所有子目录和文件名称的列表
'''
ld = os.listdir()
print(ld)
'''
#makedirs():递归创建文件夹
#格式:os.makedirs(递归路径)
#返回值:无
#递归路径:多个文件夹层层包含的路径就是递归路径,例如:a/b/c...
'''
rst = os.makedirs("liuyifei")
print(rst)
'''
'''
rstr = os.removedirs("liuyifei")
print(rstr)
'''
#system():运行系统shell命令
#格式:os.system(系统命令)
#返回值:打开一个shell或者终端界面
#一般推荐使用subprocess模块代替
'''
rst = os.system("dir")
print(rst)
'''
#getenv():获取指定的系统环境变量值
#格式:os.getenv('环境变量名')
#返回值:指定环境变量名对应的值
'''
rst = os.getenv('PATH')
print(rst)
'''
#值部分
#-os.curdir:current dir:当前目录
#-os.pardir:parent dir:父目录
#-os.sep:当前系统的路径分隔符
#-windows:"\"
#-linux:"/"
#-os.linesep:当前系统的换行符号
#-windows:"\r\n"
#-unix,linux,macos:"\n"
#-os.name:当前系统的名称
#-windows:nt
#-linux,mac,unix:posix
#print(os.curdir)
#print(os.pardir)
#print(os.sep)
#print(os.linesep)
#print(os.name)
#os.path 模块,跟路径相关的模块
#import os.path as op
#abspath():将路径转化为绝对路径
#格式:os.path.abspath('路径')
#返回值:路径的绝对路劲形式
#linux中:
#. 点,代表当前路径
#.. 双点,代表父目录
'''
absp = op.abspath(".")
print(absp)
abspf = op.abspath("..")
print(abspf)
'''
#basename():获取路径中的文件名部分
#格式:os.path.basename(路径)
#返回值:文件名字符串
'''
bn = op.basename("C:/Users/lee")
print(bn)
'''
#join():将多个路径拼合成一个路径
#格式:os.path.join(路径1,路径2,...)
#返回值:组合之后的新路径字符串
#bd = "/home/tlxy"
#fn = "dana.haha"
#p = op.join(bd,fn)
#print(p)
#>>>/home/tlxy/dana.haha
#spilt():将路径切割为文件夹部分和当前文件部分
#格式:os.path.spilt(路径)
#返回值:路径和文件名组成的元组
#t = op.split("/home/tlxy/dana.haha")
#print(t)
#>>>('home/tlxy','dana.haha')
#d,p = split("/home/tlxy/dana.haha")
#print(d,p)
#>>>/home/tlxy dana.haha
#isdir():检测是否是目录
#格式:os.path.isdir(路径)
#返回值:布尔值
#rst = op.isdir("C:/Users/lee")
#print(rst)
#>>>True
#rst = op.isdir("Users/lee")
#print(rst)
#>>>False
#exists():检测文件或者目录是否存在
#格式:os.path.exists(路径)
#返回值:布尔值
#e = op.exists("C:/Users/lee")
#print(e)
#>>>True
#e = op.exists("Users/lee")
#print(e)
#>>>False
#shutil模块
#import shutil
#copy():复制文件
#格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#拷贝的同时,可以给文件重命名
#rst = shutil.copy("/home/tlxy/dana.haha","/home/tlxy/haha.haha")
#print(rst)
#>>>/home/tlxy/haha.haha
#copy2():复制文件,保留元数据(文件信息)
#格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#注意:copy()和copy2()的唯一区别在于copy2复制文件时尽量保留元数据
#copyfile():将一个文件中的内容复制到另外一个文件当中
#格式:shutil.copyfile('源路径','目标路径')
#返回值:无
#rst = shuil,copyfile("dana.haha","haha.haha")
#print(rst)
#>>>haha.haha----->源文件中的内容被写入目标路径文件中
#move():移动文件/文件夹
#格式:shutil.move(源路径,目标路径)
#返回值:目标路径
#rst = shutil.move("/home/tlxy/dana.haha","home/tlxy/dana")
#print(rst)
#>>>/home/tlxy/dana/dana.haha
#归档和压缩
#-归档:把多个文件或者文件夹合并到一个文件当中
#-压缩:用算法把多个文件或者文件夹无损或者有损合并到一个文件当中
#make_archive():归档操作
#格式:shutil.make_archive('归档之后的目录和文件名','后缀','需要归档的文件夹')
#返回值:归档之后的地址
#rst = shutil.make_archive("/home/tlxy/tuling","zip","/home/tlxy/dana")
#print(rst)
#>>>/home/tlxy/tuling.zip
#unpack_archive():解包操作
#格式:shutil.unpack_archive('归档文件地址','解包之后的地址')
#返回值:解包之后的地址
#zip-压缩包
#import zipfile
#-模块名称叫做 zipfile
#zipfile.ZipFile(file[,mode[,comression[,allowZip64]]])
#创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,’w’表示新建一个zip文档或覆盖一个已经存在的zip文档,’a’表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
#zf = zipfile.ZipFile("/home/tlxy/tuling.zip")
#ZipFile.getinfo(name):
#获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。
#rst = zf.getinfo("dana.haha")
#print(rst)
#ZipFile.namelist()
#获取zip文档内所有文件的名称列表。
#nl = zf.namelist()
#print(nl)
#>>>['haha.haha','2-oop.ipynb','dana.haha']
#ZipFile.extractall([path[,members[,pwd]]])
#解压zip文档中所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。
#rst = zf.extractall("/home/tlxy/dana")
#print(rst)
#random
#-随机数
#-所有的随机模块都是伪随机
#random():获取0-1之间的随机小数
#格式:random.random()
#返回值:随机0-1之间的小数(不包括0和1)
#import random
#import math
#print(int(random.random()*100))
#随机生成0-100之间的整数
'''
ls = []
for i in range(200):
import math
ls.append(math.floor(random.random()*100))
print(ls)
'''
#choice():随机返回序列中的某个值
#格式:random.choice()
#返回值:序列中的某个值
#l = [str(i)+"haha" for i in range(10)]
#print(l)
#rst = random.choice(l)
#print(rst)
#shuffle():随机打乱列表
#格式:random.shuffle(列表)
#返回值:打乱顺序之后的列表
'''
l = [i for i in range(10)]
print(l)
random.shuffle(l)
print(l)
'''
#randint(a,b):返回一个a-b之间的随机整数包含a和b
#print(random.randint(0,100))
#import datetime
#import time
#def logger(fn):
# def wrap(*args,**kwargs):
# #before
# print("args={},kwargs={}".format(args,kwargs))
# start = datetime.datetime.now()
# ret = fn(*args,**kwargs)
# #after
# #print(ret)
# delta = (datetime.datetime.now()-start).total_seconds()
# if delta > 2:
# print("{} took {}s".format(fn.__name__,delta))
# return ret
# return wrap
#@logger # 相当于add = logger(add)
#def add(x,y):
# time.sleep(10)
# return x + y
##foo = logger(add)
##print(foo(4,6))
##add = logger(add) #return wrap,wrap = 增强的fn
#print(add(x = 4,y = 6))
#import datetime
#import time
#def logger(fn):
# def wrap(*args,**kwargs):
# print("args={},kwargs={}".format(args,kwargs))
# start = datetime.datetime.now()
# ret = fn(*args,**kwargs)
# delta = (datetime.datetime.now() - start).total_seconds()
# if delta > 2:
# print("{} token {}'s".format(fn.__name__,delta))
# return ret
# return wrap
#@logger
#def add(x,y):
# time.sleep(5)
# return x+y
#print(add(4,5))
#ls功能代码实现
#from pathlib import Path
#import argparse
#import datetime
#import stat
#def listdir(path=".",all=False,detail=False,human=False):
# def _convert_mode(mode:int):
# modelist = ['r', 'w', 'x', 'r', 'w', 'x', 'r', 'w', 'x']
# modestr = bin(mode)[-9:] # '110110100'
# ret = ""
# for i,c in enumerate(modestr):
# if c == '1':
# ret += modelist[i]
# else:
# ret += '-'
# return ret
# # -d -s p l c b
# def _convert_type(file:Path):
# if file.is_symlink():
# ret = '1'
# elif file.is_fifo():
# ret = 'p'
# elif file.is_socket():
# ret = 's'
# else:
# ret = '-'
# return ret
# def _get_human(size:int):
# units = ['','K','M','G','T','P'] #" KMGTP"
# depth = 0
# while size >= 1024:
# size = size//1024
# depth += 1
# return ("{}{}".format(size,units[depth]))
# def _showdir(path='.',all=False,detail=False,human=False):
# p = Path(path)
# for file in p.iterdir():
# if not all and str(file.name).startswith('.'): # .开头 不打印 --all
# continue
# # -l
# if detail:
# st = file.stat()
# # -rw-rw-r-- l python python 2920 Sep 21 07:30 ips
# h = str(st.st_size)
# if human:
# h = _get_human(st.st_size)
# yield (stat.filemode(st.st_mode),st.st_nlink,st.st_uid,st.st_gid,h,
# datetime.datetime.fromtimestamp(st.st_atime).strftime('%Y-%m-%d %H:%M:%S'),file.name)
# else: #没有 -l
# yield (file.name,)
# yield from sorted(_showdir(args.path,args.all,args.l,args.h),key=lambda x: x[len(x)-1])
##ls [path] [-l] [-a] [-h]
#parser = argparse.ArgumentParser(prog='ls',add_help=False,description='list all files') #构造解析器
#parser.add_argument('path',nargs='?',default='.',help='path help') # 位置参数
#parser.add_argument('-l',action='store_true')
#parser.add_argument('-h',action='store_true')
#parser.add_argument('-a','--all',action='store_true')
#if __name__ == '__main__':
# args = parser.parse_args()
# parser.print_help()
# print('args=',args)
# for st in listdir(args.path,args.all,args.l,args.h):
# print(st)
#class MyClass:
# """A example class"""
# x = 'abc' #类属性
# def __init__(self):#初始化(方法、函数、构造函数)
# print('init') #如果没定义,则隐式定义,返回值为pass
# def foo(self): #类属性foo,也是类方法
# return "foo = {}".format(self.x)
#a = MyClass()#实例化,初始化
#print(a.foo())
#class person:
# x = 'abc'
# def __init__(self,name,age=18):
# self.name = name
# self.age = age
# def showage(self,x,y):
# print('{} is {}'.format(self.name,self.age),x,y)
# self.y = x
# person.x = x
#tom = person('tom',32) #实例化
#jerry = person('jerry',21)
#print(id(tom))
#print(id(person('tom',32)))
#print(tom.name,tom.age)
#print(jerry.name,jerry.age)
#print(tom.x,jerry.x)
#print('--------------------')
#tom.showage(100,'a')
#print(tom.y)
#print(person.x)
#jerry.showage(200,'d')
#print(jerry.y)
#print(person.x)
#person.x = 'fdsfsd'
#print(tom.x,jerry.x)
#print(person.__dict__)
#print(tom.__class__,jerry.__class__)
#print(tom.__class__.__name__,jerry.__class__.__name__)
#print(tom.__dict__)
#print(jerry.__dict__)
#print(tom.__dict__['name'])
#class Person:
# height = 180
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def showper(self,x,y):
# print("{} is {}".format(self.name,self.age))
# self.sex = y
# Person.height = x
#Tom = Person('tom',22)
#Jerry = Person('jerry',43)
#print(Tom.name,Tom.age)
#print(Jerry.name,Jerry.age)
#print(Person.__dict__)
#print("-------------------")
#Tom.showper(188,"male")
#print(Tom.sex)
#print(Person.height)
#Jerry.showper(165,"female")
#print(Jerry.sex)
#print(Person.height)
#print("------------")
#print(Person.__dict__)
#print(Tom.__dict__)
#print(Jerry.__dict__)
#print("----------------")
#print(Person.__class__)
#print(Tom.__class__)
#print(Jerry.__class__)
#print("-------------")
#print(Person.__class__.__name__)
#print(Tom.__class__.__name__)
#print(Jerry.__class__.__name__)
#print("---------------")
#print(Person.__class__.__doc__)
#print(Tom.__class__.__doc__)
#print(Jerry.__doc__)
#类以及实例的变量访问
#class Person:
# age = 3
# height = 170
# def __init__(self,name,age=18):
# self.name = name
# self.age = age
#Tom = Person('tom') #实例化
#Jerry = Person('jerry',21)
##Person.age = 30
#print(Person.age,Tom.age,Jerry.age)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#print(Person.height,Tom.height,Jerry.height)
#Person.height += 20
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#Tom.height = 168
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#Jerry.height += 30
#print(Person.height,Tom.height,Jerry.height)
#print(Person.__dict__,Tom.__dict__,Jerry.__dict__,sep = '\n')
#Person.weight = 70
#print(Person.weight,Tom.weight,Jerry.weight)
#print(Person.__dict__['weight'])
#print(Tom.weight)
#类装饰器
#def setnameproperty(name):
# def wrapper(cls):
# cls.NAME = name
# return cls
# return wrapper
#@setnameproperty('Tom') # Person = stenameproperty("Tom")(Person)
#class Person:
# AGE = 5
#print(Person.NAME)
#print(Person.AGE)
#class tracer:
# def __init__(self,func):
# self.calls = 0
# self.func = func
# def __call__(self,*args):
# self.calls += 1
# print('call %s to %s' %(self.calls, self.func.__name__))
# self.func(*args)
#@tracer # spam = tracer(spam)
#def spam(a, b, c):
# print(a + b + c)
#spam(1,2,3)
#class tracer:
# def __init__(self, *args):
# self.calls = 0
# self.args = args
# def __call__(self, func):
# self.func = func
# def realfunc(*args):
# self.calls += 1
# print('call %s to %s' %(self.calls, self.func.__name__))
# print (self.func(*args))
# print(*self.args)
# return realfunc
#@tracer("fdfds")
#def spam(a, b, c):
# return a + b + c
#spam(1,2,3)
#面向对象类方法以及静态方法
#class Person:
# HEIGHT = 122
# def __init__(self,name,HEIGHT):
# self.name = name
# self.HEIGHT = HEIGHT
# def normal_method():
# print('nornal')
# def method(self):
# print("{0.name}'s method".format(self))
# @classmethod
# def class_method(cls):
# print('class = {0.__name__} ({0})'.format(cls))
# cls.HEIGHT += 10
# @staticmethod
# def static_methd():
# print(Person.HEIGHT)
#print('~~~~~类访问~~~~~~~~~~')
#print("1",Person.normal_method())
#print("--------------")
##print("2",Person.method())
##print("3",Person.class_method())
#print("4",Person.static_methd())
#print("--------------")
#print(Person.__dict__)
#print('~~~实例访问~~~~~~~~~~~')
#print('tom---')
#tom = Person("tom",1333)
##print("1",tom.normal_method())
#print("2",tom.method())
#print("3",tom.class_method())
#print("4",tom.static_methd())
#print('jerry---')
#jerry = Person("jerry",111)
##print("1",jerry.normal_method())
#print("2",jerry.method())
#print("3",jerry.class_method())
#print("4",jerry.static_methd())
#class Dog(object):
# def __init__(self, name):
# self.name = name
# @staticmethod # 属于类的一种方法,但无法访问类或实例的属性
# def eat(self, food):
# print("%s is eating %s" % (self.name, food))
# def talk(self):
# print("%s is talking." % self.name)
#dog = Dog("Tom")
## 当eat变成静态方法后,再通过实例调用时就不会自动把实例本身当作一个参数传给self
##dog.eat("Apple")
## TypeError: eat() missing 1 required positional argument: 'food'
## 正确的姿势
#dog.eat(dog, "Apple")
#类继承
#class Parent: # 定义父类
# parentAttr = 100
# def __init__(self):
# print ("调用父类构造函数")
# def parentMethod(self):
# print ('调用父类方法')
# def setAttr(self, attr):
# Parent.parentAttr = attr
# def getAttr(self):
# print ("父类属性 :", Parent.parentAttr)
#class Child(Parent): # 定义子类
# def __init__(self):
# print ("调用子类构造方法")
# def childMethod(self):
# print ('调用子类方法')
#c = Child() # 实例化子类
#c.childMethod() # 调用子类的方法
#c.parentMethod() # 调用父类方法
#c.setAttr(200) # 再次调用父类的方法 - 设置属性值
#c.getAttr()
#方法重写
#class Parent:
# def myMethod(self):
# print("parent's method!")
# def mMethod(self):
# print("43432")
#class Child(Parent):
# def myMethod(self):
# print("child's method!")
#c = Child()
#c.myMethod()
#c.mMethod()
#访问控制--私有变量
#class Person:
# __age = 11
# def __init__(self,name,age=18):
# self.name = name
# self.__age = age
# def growup(self,incr = 1):
# if 0 < incr <150:
# self.__age += incr
# def getage(self):
# return self.__age
#Tom = Person('tom')
#Tom.growup(2)
#print(Tom.getage())
#print(Tom._Person__age)
#print(Person.__dict__)
#print(Tom.__dict__)
#Tom._Person__age = 200
#print(Tom.getage())
#Tom.age = 2000
#print(Tom.getage())
#print(Tom.age)
#私有成员---私有变量,私有方法
#class Person:
# def __init__(self,name,age=18):
# self._name = name
# self.__age = age
# def __growup(self,incr = 1):
# if 0 < incr <150:
# self.__age += incr
# def __getname(self):
# return self._name
# def __getage(self):
# return self.__age
#Tom = Person('tom')
##Tom.growup(2)
#print(Tom._Person__getage())
##Tom._name = 'jerry'
#print(Tom._name)
#print(Tom._Person__getname())
#print(Person.__dict__)
##print(Tom.__dict__)
##Tom._Person__age = 200
##print(Tom.getage())
#import sys
#import os
#debug = True
#class FooClass(object):
# "Foo class"
# pass
#def test():
# "test function"
# foo = FooClass()
# if debug:
# print ('run test()')
#if __name__ == '__main__':
# test()
#print(FooClass.__dict__)
#for i in range(-3,4):
# if i < 0:
# n = -i
# print(" "*n + "*" * (7-2*n))
# elif i == 0:
# print("*"*7)
# else:
# n = i
# print(" "*n + "*" *(7-2*n))
#print("----------")
#for i in range(-3,4):
# if i < 0:
# n = -i
# print(" "*n + "*" * (4-n))
# elif i == 0:
# print("*"*7)
# else:
# n = i
# print(" "* + "*" *(4-n))
#判断文件是否存在,存在打开。并连续写入保存记忆关闭
#import os
#import os.path
#if os.path.exists("C:/Users/lee/Desktop/helloworld"):
# f1 = open("C:/Users/lee/Desktop/helloworld", "a+")
#while True:
# line = input("Enter something:")
# if line == "q" or line == "quit":
# break
# f1.write(line+"\n")
#f1.close()
#嵌套函数
#1
#x = 6
#z = "global"
#def f1():
# x = "from f1"
# y = 3
# print(x,z)
# def f2():
# x = "from f2"
# print(x,y)
# f2()
##2
#def f1():
# x = 3
# def f2():
# y = "hello"
# print(x,y)
# return f2
#f1() #返回的是f2(是一个函数对象)
#a1 = f1() #a1指向f2(a1是一个函数引用)
#type(a1) #function
#a1() #调用f2()
#类和对象
#'''
#定义一个学生类,用来形容学生
#'''
#class Student():
# #一个空类,pass代表直接跳过
# #此处pass必须有
# pass
##定义一个对象
#mingyue = Student()
##再定义一个类,用来描述听Python的学生
#class PythonStudent():
# #用None给不确定的值赋值
# name = None
# age = 18
# course = "Python"
# #需要注意
# #1.def doHomework的缩进层级
# #2.系统默认出一个self参数
# def doHomework(self,user,ages):
# self.user = user
# self.ages = ages
# #推荐在函数末尾使用return语句
# return None
##实例化一个叫yueyue的学生,是一个具体的人
#yueyue = PythonStudent()
#print(yueyue.name)
#print(yueyue.age)
#print(yueyue.__dict__)
#print("*"*10)
##注意成员函数的调用没有传递进入参数
#yueyue.doHomework("liuyifei",18)
#print(yueyue.user)
#print(yueyue.ages)
#print(PythonStudent.name)
#print(PythonStudent.age)
#print(PythonStudent.__dict__)
#print(yueyue.__dict__)
#class Wife():
# name = "刘亦菲"
# age = 18
# def __init__(self,name,age):
# self.name = name
# self.age = age
# def family(self,husband):
# self.husband = husband
# #Student.name = name
#yifei = Wife("yifei",18)
#print(yifei.name)
#print(yifei.age)
#yifei.family("lifei")
#print(yifei.husband)
#print(Wife.name)
#print("*"*10)
#print(yifei.__class__.name)
#print(yifei.__class__.age)
#class A():
# name = "liuyifei"
# age = 18
# def __init__(self):
# self.name = "aaa"
# self.age = 100
# def sing(self):
# print("我的名字是{0},今年{1}岁了!".format(self.name,self.age))
#class B():
# name = "lifei"
# age = 18
#a = A()
#print(a.name)
#print(a.age)
#a.sing()
#A.sing(A)
#print("*"*10)
#A.sing(B)
#私有变量,公有变量
#class Person():
# #name是公有变量
# name = "feifei"
# #__age是私有变量
# __age = 18
#P = Person()
#print(P.name)
#print(P._Person__age)
#P._Person__age = 20
#print(P._Person__age)
#封装
#继承
#class A():
# name = "liuyifei" #公有变量
# __age = 18 #私有变量
# _petname = "xixi" #受保护的,但不能公用
# def __init__(self):
# #self.name = "aaa"
# #self.age = 100
# pass
# def __work(self): #私有方法
# self.work = "actor"
# def sing(self):
# print("我的名字是{0},今年{1}岁了!".format(self.name,self.__age))
#class B(A):
# def sing(self):
# #A.sing(self) #方法扩展
# #super().sing()
# print("hello") #如果没有上面两个中的一个,则为方法重写
# pass
#b = B()
#print(b.name)
#print(b._A__age)
#b.sing()
#print(B.name)
#print(b._petname)
#b._A__work()
#print(b.work)
#class Fish():
# def __init__(self,name):
# self.name = name
# def swim(self):
# print("i am swiming...")
#class Bird():
# def __init__(self,name):
# self.name = name
# def fly(self):
# print("i am flying...")
#class Person():
# def __init__(self,name):
# self.name = name
# def work(self):
# print("i am working...")
##单继承
#class Student(Person):
# def __init__(self,name):
# self.name = name
# def study(self):
# print("i am studying...")
##多继承
#class SuperMan(Person,Bird,Fish):
# def __init__(self,name):
# self.name = name
#class SwimMan(Person,Fish):
# def __init__(self,name):
# self.name = name
#st = Student("feifei")
#st.study()
#st.work()
#print("*"*20)
#s = SuperMan("yifei")
#s.fly()
#s.swim()
#s.work()
#构造函数自动调用
#class A():
# '''
# 构造函数自动调用
# '''
# def __init__(self,name):
# self.name = "yiffei"
# self.age = 18
# print("IN init func")
#class B(A):
# #def __init__(self,name):
# #print("B")
# #print(name)
# pass
#class C(B):
# def __init__(self,name):
# B.__init__(self,name)
# print("wo shi c")
#c = C("woshicccc")
#b = B("wwww")
#Mixin案例
#class Person():
# name = "liuyifei"
# age = 18
# def eat(self):
# print("eating....")
# def drink(self):
# print("drinking.....")
# def sleep(self):
# print("sleeping...")
#class Teacher(Person):
# def work(self):
# print("working.....")
#class Student(Person):
# def study(self):
# print("studying....")
#class Tutor(Teacher,Student):
# pass
#t = Tutor()
#print(Tutor.__mro__)
#print(t.__dict__)
#print(Tutor.__dict__)
#print("*"*20)
#class TeacherMixin():
# def work(self):
# print("work")
#class StudentMixin():
# def study(self):
# print("study")
#class TutorMixin(Person,TeacherMixin,StudentMixin):
# pass
#定义一个Person类,具有name,age属性
#对于任意输入的姓名,我们希望都用大写方式保存
#年龄,我们希望内部同一用整数保存
#x = property(fget,fset,fdel,doc)
#class Person():
# '''
# 这是一个关于人的类
# '''
# #函数的名称可以任意
# def fget(self):
# return self._name
# def fget1(self):
# return self._age
# def fset(self,name):
# #所有输入的姓名以大写形式保存
# self._name = name.upper()
# def fset1(self,age):
# #所有输入的年龄以整数保存
# self._age = int(age)
# def fdel(self):
# self._name = "NoName"
# self._age = 100
# name = property(fget, fset, fdel, "对name进行如下操作")
# age = property(fget1, fset1, fdel, "对age进行如下操作")
#p1 = Person()
#p1.name = "feifei"
#p1.age = 18.7
#print(p1.__dict__)
#print(p1._name)
#print(p1._age)
#print(Person.__doc__)
#print(Person.__name__)
#print(Person.__bases__)
#__getattr__案例
#class A():
# name = "feifei"
# age = 11
# def __getattr__(self,name):
# #print("NO attr")
# #print(name)
# return "NO attr",name
#a = A()
#print(a.name)
#print(a.addr)
#__setattr__案例
#class A():
# def __init__(self):
# pass
# def __setattr__(self, name, value):
# print("设置属性:{0}".format(name))
# #下面语句会导致问题,死循环
# #self.name = value
# #此种情况,为了避免死循环,规定统一调用父类魔法函数
# super().__setattr__(name, value)
#a = A()
#print(a.__dict__)
#a.age = 18
#__gt__案例
#class Student():
# def __init__(self, name):
# self._name = name
# def __gt__(self, obj):
# #print("哈哈,{0}会比{1}大吗?".format(self, obj.))
# print("哈哈,{0}会比{1}大吗?".format(self._name, obj._name))
# return self._name > obj._name
#stu1 = Student("one")
#stu2 = Student("two")
#print(stu1 > stu2)
#class Person():
# def eat(self):
# print(self)
# print("Eating")
# @classmethod
# def play(cls):
# print(cls)
# print("Playing...")
# @staticmethod
# def say():
# print("Saying...")
#feifei = Person()
#feifei.eat()
#Person.play()
#feifei.play()
#Person.say()
#feifei.say()
#class A():
# def __init__(self):
# self.name = "feifei"
# self.age = 18
#a = A()
#a.name = "feifeiiei"
#print(a.name)
#del a.name
##print(a.name)
#class A():
# def __init__(self):
# self.name = "feifei"
# self.age =18
# def fget(self):
# print("我被读取了")
# return self.name
# def fset(self, name):
# print("我被写入了,但是还可以做好多事情")
# self.name = "飞飞" + name
# def fdel(self):
# pass
# name2 = property(fget, fset, fdel, "这是一个property的例子")
#a = A()
#print(a.name)
#print(a.name2)
#class A():
# def __init__(self):
# self.name = "feifei"
# self.age =18
# def fget(self):
# print("我被读取了")
# return self.name
# def fset(self, name):
# print("我被写入了,但是还可以做好多事情")
# self.name = "飞飞" + name
# def fdel(self):
# pass
# name2 = property(fget, fset, fdel, "这是一个property的例子")
#a = A()
#print(a.name)
#print(a.name2)
##抽象类的实现
#import abc
##声明一个类并且指定当前类的元类
#class Human(metaclass = abc.ABCMeta):
# #定义一个抽象的方法
# @abc.abstractmethod
# def smoking(self):
# pass
# #定义类抽象方法
# @abc.abstractclassmethod
# def drink():
# pass
# #定义静态抽象方法
# @abc.abstractstaticmethod
# def play():
# pass
# def sleep(self):
# print("Sleeping....")
##自己组装一个类
#class A():
# pass
#def say(self):
# print("Saying....")
#say(9)
#A.say = say
#a = A()
#a.say()
##例子-2
##自己组装一个类
#from types import MethodType
#class A():
# pass
#def say(self):
# print("Saying....")
#a = A()
#a.say = MethodType(say,A)
#a.say()
##利用type制造一个类
##先定义类应该具有的成员函数
#def say(self):
# print("Saying....")
#def talk(self):
# print("Talking...")
##用type来创建一个类
#A = type("AName", (object, ), {"class_say":say, "class_talk":talk})
##然后可以像正常访问一样使用类
#a = A()
#a.class_say()
#a.class_talk()
##元类演示
##元类写法是固定的,它必须继承自type
##元类一般命名以MetaClass结尾
#class TulingMetaClass(type):
# #注意以下写法
# def __new__(cls, name, bases, attrs):
# #自己的业务处理
# print("哈哈,我是元类")
# attrs['id'] = '000000'
# attrs['addr'] = "北京海淀区公主坟西翠路12号"
# return type.__new__(cls, name, bases, attrs)
##元类定义完就可以使用,使用注意写法
#class Teacher(object, metaclass=TulingMetaClass):
# pass
#t = Teacher()
#print(t.id)
#print(t.addr)
#print(t.__dict__)
#写一个模块
#包含一个学生类
#一个sayHello函数
#一个打印语句
#class Student():
# def __init__(self, name="NoName", age=19):
# self.name = name
# self.age = age
# def intd(self):
# print("My name is {0},{1} years old".format(self.name,self.age))
#def sayHello():
# print("Hi,welcome!")
##此判断语句建议一直作为程序的入口
#if __name__ == '__main__':
# print("我是模块Student")
#异常处理
#try:
# num = int(input("Plz input your number:"))
# rst = 100/num
# print("计算结果是{0}".format(rst))
#except ZeroDivisionError as e:
# print("输入错了")
# print(e)
# exit()
#except NameError as e:
# print("名字起错了")
# print(e)
# exit()
#except AttributeError as e:
# print("好像属性问题")
# print(e)
# exit()
#except ValueError as e:
# print("值错误")
# print(e)
# exit()
##下面这句话是最后一个错误exception
#except Exception as e:
# print("我也不知道")
# print(e)
#else:
# print("good!")
#finally:
# print("牛逼")
##用户手动触发异常
##当某些情况,用户希望自己引发一个异常的时候,可以使用
##raise关键字来引发异常
#try:
# print("hello!")
# print("guys")
# #手动引发一个Name异常
# #注意语法:raise ErrorClassName
# raise NameError('HiThere')
#except NameError:
# print('An exception flew by!')
# #raise
#except ValueError as e:
# print("ValueError")
#except Exception as e:
# print("有异常")
#else:
# print("All right")
#finally:
# print("I am coming")
##案例2
##自己定义异常
##需要注意:自定义异常必须是系统资产的子类
#class FlyNameError(NameError):
# pass
#try:
# print("hello!")
# print("guys")
# #手动引发一个Name异常
# #注意语法:raise ErrorClassName
# raise FlyNameError('HiThere')
#except NameError:
# print('NameError')
# #raise
#except FlyNameError as e:
# print("FlyNameError")
#except ValueError as e:
# print("ValueError")
#except Exception as e:
# print("有异常")
#else:
# print("All right")
#finally:
# print("I am coming")
#####常用模块
##calendar
#import calendar
##calendar:获取一年的日历字符创
##参数
##w = 每个日期之间的间隔字符数
##l = 每周所占用的行数
##c = 每个月之间的间隔字符数
#cal = calendar.calendar(2018)
#print(type(cal))
##print(cal)
#cal = calendar.calendar(2018,w=1,l=0,c=10)
#print(cal)
##isleap:获取某一年是否闰年
#calendar.isleap(2000)
##leapdays:获取指定年份之间的闰年的个数
#calendar.leapdays(1998,2018)
##mouth():获取某个月的日历字符串
##格式:calendar.month(年,月)
##返回值:月日历的字符串
#m3 = calendar.month(2018,3)
#print(m3)
##monthrange():获取一个月的周几开始和天数
##格式:calendar.monthrange(年,月)
##返回值:元组(周几开始,总天数)
##注意:周默认0-6表示周一到周日
#t = calendar.monthrange(2018,5)
#print(t)
##monthcalendar():返回一个月每天的矩阵列表
##格式:calendar.monthcalendar(年,月)
##返回值:二级列表
##注意:矩阵中没有天数用0表示
#m = calendar.monthcalendar(2018,5)
#print(m)
##prcal:print calendar直接打印日
#calendar.prcal(208)
##prmonth():直接打印整个月的日历
##格式:calendar》prmonth(年,月)
##返回值:无
#calendar.prmonth(2018,5)
##time模块
##时间戳
##UTC时间
##夏令时
##时间元组:包含时间内容的普通元组
#import time
##时间模块的属性
##timeone:当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔,东八区是-28800
##altzone:获取当前时区与UTC时间相差的秒数,在有夏令时的情况下,东八区是-32400
##daylight:测当前是否是夏令时的时间状态
##print(time.timezone)
##print(time.altzone)
##print(time.daylight)
##得到时间戳
##print(time.time())
##localtime,得到当前时间的时间结构
##可以通过点操作得到相应的属性元素的内容
##t = time.localtime()
##print(t)
##asctime():返回元祖的正常字符化之后的时间格式
##格式:time.asctime(时间元组)
##返回值:字符串 Sat May 19 17:53:31 2018
##tt = time.asctime(t)
##print(tt)
##print(type(tt))
##ctime:获取字符串化的当前时间
##t1 = time.ctime()
##print(t1)
##mktime():使用时间元组获取对应的时间戳
##格式:time.mktime(时间元组)
##返回值:浮点数时间戳
##t2 = time.localtime()
##t3 = time.mktime(t2)
##print(t3)
##clock:获取cpu时间,3.0-3.3版本直接使用,3.6调用有问题
##sleep:是程序进入休眠状态,n秒之后继续
##for i in range(10):
## print(i)
## time.sleep(1)
#'''def p():
# time.sleep(2.5)
#t0 = time.clock()
##p()
#time.sleep(3)
#t1 = time.clock()
#print(t1 - t0)'''
##strftime:将时间元组转化为自定义的字符串格式
##把时间表示成 2018 5.19 18:11
#t = time.localtime()
#ft = time.strftime("%Y%m%d %H:%M", t)
#print(ft)
##datetime模块
##-datetime提供日期和时间的运算和表示
#import datetime
##datetime常见属性
##datetime.date: 一个理想化的日期,提供year,month,day属性
#'''t = datetime.date(2018,5,19)
#print(t)
#print(t.year)
#print(t.month)
#print(t.day)'''
##datetime.time:提供一个理想化的时间,提供hour,minute,second,microsecond等内容
#'''t1 = datetime.time(18,39,30,20)
#print(t1)
#print(t1.hour)
#print(t1.minute)
#print(t1.second)
#print(t1.microsecond)'''
##datetime.datetime:提供日期跟时间的结合
#from datetime import datetime
##常用类方法
##today
##now
##utcnow
##fromtimestamp
#'''dt = datetime(2018,5,19)
#print(dt.today())
#print(dt.now())
#print(dt.utcnow())'''
##datetime.timedelta:提供一个时间差,时间长度
#from datetime import datetime,timedelta
##t3 = datetime.now()
##print(t3)
##print(t3.strftime("%Y-%m-%d %H:%M:%S"))
##t4 = timedelta(hours = 1)
##当前时间加上时间间隔后,把得到的一个小时后的时间格式化输出
##print((t3+t4).strftime("%Y-%m-%d %H:%M:%S"))
##timeit:时间测量工具
##测量程序运行时间间隔实验
#'''def p():
# time.sleep(3)
#t1 = time.time()
#p()
#print(time.time() - t1)'''
##生成列表两种方法的比较
##如果单纯生成一个列表的时间,可能很难实现
#import timeit
#'''
#c = '''
#sum = []
#for i in range(1000):
# sum.append(i)
#'''
##利用timeit调用代码,执行10000次,查看运行时间
#t1 = timeit.timeit(stmt="[i for i in range(1000)]",number=10000)
##测量代码c执行10000次运行的结果
#t2 = timeit.timeit(stmt=c,number=10000)
#print(t1)
#print(t2)
#'''
##timeit 可以执行一个函数,来测量一个函数的执行时间
#'''
#f doIt():
# num = 3
# for i in range(num):
# print("Repeat for {0}".format(i))
##执行函数,重复10次
#t = timeit.timeit(stmt=doIt,number=10)
#print(t)
#'''
#s = '''
#def doIt():
# num = 3
# for i in range(num):
# print("Repeat for {0}".format(i))
#'''
##执行doIt(num)
##setup负责把环境变量准备好
##实际相当于给timeit创造了一个小环境
##在创造的小环境中,代码执行的顺序大致是:
##def doIt(num):
## ....
##num = 3
##doIt(num)
#t = timeit.timeit("doIt()",setup=s+"num=3",number=10)
#print(t)
#os-操作系统相关
#主要是文件操作
#和操作系统相关的操作,主要包含三个模块
#-os,操作系统目录相关
#-os.path,系统路径相关操作
#-shutil,高级文件操作,目录树的操作,文件赋值,删除,移动
#-路径:
#-决定路径:总是从根目录上开始
#-相对路径:基本上以当前环境为开始的一个相对的地方
#os模块
#getcwd():获取当前的工作目录
#格式:os.getcwd()
#返回值:当前工作目录的字符串
#当前工作目录就是程序在进行文件相关操作,默认查找文件的目录
'''
import os
mydir = os.getcwd()
print(mydir)
'''
#chdir():改变当前的工作目录
#change directory
#格式:os.chdir(路径)
#返回值:无
'''
os.chdir('C:/Users/lee')
mydir = os.getcwd()
print(mydir)
'''
#listdir():获取一个目录中所有子目录和文件的名称列表
#格式:os.listdir(路径)
#返回值:所有子目录和文件名称的列表
'''
ld = os.listdir()
print(ld)
'''
#makedirs():递归创建文件夹
#格式:os.makedirs(递归路径)
#返回值:无
#递归路径:多个文件夹层层包含的路径就是递归路径,例如:a/b/c...
'''
rst = os.makedirs("liuyifei")
print(rst)
'''
'''
rstr = os.removedirs("liuyifei")
print(rstr)
'''
#system():运行系统shell命令
#格式:os.system(系统命令)
#返回值:打开一个shell或者终端界面
#一般推荐使用subprocess模块代替
'''
rst = os.system("dir")
print(rst)
'''
#getenv():获取指定的系统环境变量值
#格式:os.getenv('环境变量名')
#返回值:指定环境变量名对应的值
'''
rst = os.getenv('PATH')
print(rst)
'''
#值部分
#-os.curdir:current dir:当前目录
#-os.pardir:parent dir:父目录
#-os.sep:当前系统的路径分隔符
#-windows:"\"
#-linux:"/"
#-os.linesep:当前系统的换行符号
#-windows:"\r\n"
#-unix,linux,macos:"\n"
#-os.name:当前系统的名称
#-windows:nt
#-linux,mac,unix:posix
#print(os.curdir)
#print(os.pardir)
#print(os.sep)
#print(os.linesep)
#print(os.name)
#os.path 模块,跟路径相关的模块
#import os.path as op
#abspath():将路径转化为绝对路径
#格式:os.path.abspath('路径')
#返回值:路径的绝对路劲形式
#linux中:
#. 点,代表当前路径
#.. 双点,代表父目录
'''
absp = op.abspath(".")
print(absp)
abspf = op.abspath("..")
print(abspf)
'''
#basename():获取路径中的文件名部分
#格式:os.path.basename(路径)
#返回值:文件名字符串
'''
bn = op.basename("C:/Users/lee")
print(bn)
'''
#join():将多个路径拼合成一个路径
#格式:os.path.join(路径1,路径2,...)
#返回值:组合之后的新路径字符串
#bd = "/home/tlxy"
#fn = "dana.haha"
#p = op.join(bd,fn)
#print(p)
#>>>/home/tlxy/dana.haha
#spilt():将路径切割为文件夹部分和当前文件部分
#格式:os.path.spilt(路径)
#返回值:路径和文件名组成的元组
#t = op.split("/home/tlxy/dana.haha")
#print(t)
#>>>('home/tlxy','dana.haha')
#d,p = split("/home/tlxy/dana.haha")
#print(d,p)
#>>>/home/tlxy dana.haha
#isdir():检测是否是目录
#格式:os.path.isdir(路径)
#返回值:布尔值
#rst = op.isdir("C:/Users/lee")
#print(rst)
#>>>True
#rst = op.isdir("Users/lee")
#print(rst)
#>>>False
#exists():检测文件或者目录是否存在
#格式:os.path.exists(路径)
#返回值:布尔值
#e = op.exists("C:/Users/lee")
#print(e)
#>>>True
#e = op.exists("Users/lee")
#print(e)
#>>>False
#shutil模块
#import shutil
#copy():复制文件
#格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#拷贝的同时,可以给文件重命名
#rst = shutil.copy("/home/tlxy/dana.haha","/home/tlxy/haha.haha")
#print(rst)
#>>>/home/tlxy/haha.haha
#copy2():复制文件,保留元数据(文件信息)
#格式:shutil.copy(来源路径,目标路径)
#返回值:返回目标路径
#注意:copy()和copy2()的唯一区别在于copy2复制文件时尽量保留元数据
#copyfile():将一个文件中的内容复制到另外一个文件当中
#格式:shutil.copyfile('源路径','目标路径')
#返回值:无
#rst = shuil,copyfile("dana.haha","haha.haha")
#print(rst)
#>>>haha.haha----->源文件中的内容被写入目标路径文件中
#move():移动文件/文件夹
#格式:shutil.move(源路径,目标路径)
#返回值:目标路径
#rst = shutil.move("/home/tlxy/dana.haha","home/tlxy/dana")
#print(rst)
#>>>/home/tlxy/dana/dana.haha
#归档和压缩
#-归档:把多个文件或者文件夹合并到一个文件当中
#-压缩:用算法把多个文件或者文件夹无损或者有损合并到一个文件当中
#make_archive():归档操作
#格式:shutil.make_archive('归档之后的目录和文件名','后缀','需要归档的文件夹')
#返回值:归档之后的地址
#rst = shutil.make_archive("/home/tlxy/tuling","zip","/home/tlxy/dana")
#print(rst)
#>>>/home/tlxy/tuling.zip
#unpack_archive():解包操作
#格式:shutil.unpack_archive('归档文件地址','解包之后的地址')
#返回值:解包之后的地址
#zip-压缩包
#import zipfile
#-模块名称叫做 zipfile
#zipfile.ZipFile(file[,mode[,comression[,allowZip64]]])
#创建一个ZipFile对象,表示一个zip文件。参数file表示文件的路径或类文件对象(file-like object);参数mode指示打开zip文件的模式,默认值为’r’,表示读已经存在的zip文件,也可以为’w’或’a’,’w’表示新建一个zip文档或覆盖一个已经存在的zip文档,’a’表示将数据附加到一个现存的zip文档中。参数compression表示在写zip文档时使用的压缩方法,它的值可以是zipfile. ZIP_STORED 或zipfile. ZIP_DEFLATED。如果要操作的zip文件大小超过2G,应该将allowZip64设置为True。
#zf = zipfile.ZipFile("/home/tlxy/tuling.zip")
#ZipFile.getinfo(name):
#获取zip文档内指定文件的信息。返回一个zipfile.ZipInfo对象,它包括文件的详细信息。
#rst = zf.getinfo("dana.haha")
#print(rst)
#ZipFile.namelist()
#获取zip文档内所有文件的名称列表。
#nl = zf.namelist()
#print(nl)
#>>>['haha.haha','2-oop.ipynb','dana.haha']
#ZipFile.extractall([path[,members[,pwd]]])
#解压zip文档中所有文件到当前目录。参数members的默认值为zip文档内的所有文件名称列表,也可以自己设置,选择要解压的文件名称。
#rst = zf.extractall("/home/tlxy/dana")
#print(rst)
#random
#-随机数
#-所有的随机模块都是伪随机
#random():获取0-1之间的随机小数
#格式:random.random()
#返回值:随机0-1之间的小数(不包括0和1)
#import random
#import math
#print(int(random.random()*100))
#随机生成0-100之间的整数
'''
ls = []
for i in range(200):
import math
ls.append(math.floor(random.random()*100))
print(ls)
'''
#choice():随机返回序列中的某个值
#格式:random.choice()
#返回值:序列中的某个值
#l = [str(i)+"haha" for i in range(10)]
#print(l)
#rst = random.choice(l)
#print(rst)
#shuffle():随机打乱列表
#格式:random.shuffle(列表)
#返回值:打乱顺序之后的列表
'''
l = [i for i in range(10)]
print(l)
random.shuffle(l)
print(l)
'''
#randint(a,b):返回一个a-b之间的随机整数包含a和b
#print(random.randint(0,100))