zoukankan      html  css  js  c++  java
  • Python--day6

    os模块:

    os.getcwd()  获取当前工作目录,即当前Python脚本工作的目录路径

    os.chdir(‘dirname’) 改变当前脚本工作目录;相当于shell下的cd

    os.curdir   返回当前目录:(‘.’)

    os.pardir  获取当前目录的父目录字符串名:(‘..’)

    os.makedirs('dirname1/dirname2')  可生成多层递归目录

    os.removedirs('dirname1')  若目录为空,则删除,并递归到上一级目录,如若也为空也删除,以此类推

    os.mkdir('dirname')  生单级目录;相当于shell中mkdir

    os.rmdir('dirname')  删除单级目录,若目录不为空则无法删除

    os.listdir('dirname')  列出指定目录下的所有文件和子目录

    os.remove()     删除一个文件

    os.rename("oldname","newname")  重命名文件/目录

    os.stat('path/filename')  获取文件/目录信息

    os.sep        输出操作系统特定路径分隔符,win下为“\”,linux下为‘’

    os.linesep        输出当前平台使用的行终止符,win下为“ ”,linux下为“ ”

    os.pathsep      输出用于分割文件路径的字符串

    os.name           输出字符串指示当前使用平台。win ->'nt'; linux->'posix'

    os.system("bash command") 运行shell命令,直接显示

    os.environ        获取操作系统环境变量

    os.path.abspath(path)  返回path规范的绝对路径

    os.path.split(path)    将path分割成目录和文件

    os.path.dirname(path)    返回path的目录,其实就是os.path.split('path')

    os.path.basename(path)    返回path最后的文件名

    os.path.exists(path)      如果path存在,返回True,不存在返回False

    os.path.isabs(path)      如果path是绝对路径,返回True

    os.path.isfile(path)      如果path是一个存在的文件返回True,如果不存在返回False

    os.path.isdir(path)      如果path是一个存在的目录,则返回True

    os.path.join(path1[,path2[,...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

    os.path.getatime(path)    返回path所指向的文件或者目录的最后存取时间

    os.path.getmtime(path)    返回path所指向的文件或者目录的最后修改时间

    os.popen(dir).read()      popen 相当于打开一个临时文件把执行结果存下来,并打印出来

    sys模块

    sys.argv  命令行参数list,第一个元素是程序本身路径

    sys.exit(n)  退出程序,正常退出时exit(0)

    sys.version  获取Python解释程序的版本信息

    sys.maxint  最大的int值

    sys.path    返回模块的搜索路径,初始化是使用Pythonpath环境变量的值

    sys.platform  返回操作系统平台名称

    sys.stdout.write('please:')

    val = sys.stdin.readline()[:-1]

    shutil模块

    高级的 文件、文件夹、压缩包 处理模块

    shutil.copyfileobj(fsrc,fdst[,length])

    将文件内容拷贝到另一个文件中,可以部分内容

    shutil.copyfile(src,dst)    文件的复制

    shutil.copymode(src,dst)  仅拷贝权限,内容、组、用户均不变

    shutil.copystat(src,dst)  拷贝状态的信息,包括:mode bits,atime,mtime

    shutil.copy(src,dst)    拷贝文件和权限

    shutil.copy2(src,dst)    拷贝文件和状态信息

     shutil.ignore_patterns(*patterns) 

    shutil.copytree(src,dst,symlinks=False,ignore=None) 递归的去拷贝文件

    shutil.rmtree(path[,ignore_errors[,onerror]])    递归的去删除目录/文件

    shutil.move(src,dst)    递归的去移动目录/文件

    shutil.make_archive(base_name,format,...)  创建压缩包并返回文件路径,例如:zip、tar

    base_name:压缩包的文件名,也可以是压缩包的路径。否则保存至指定路径。

    如:www  =>保存至当前路径

    如:/Users/wupeiqi/www  =>保存至/Users/wupeiqi/

    format:压缩包种类,“zip”,"tar","bztar","gztar"

    root_dir:要压缩的文件夹路径(默认当前目录)

    owner:用户,默认当前用户

    group:组,默认当前组

    logger:用于记录日志,通常是logging.Logger对象

    pickle 模块提供了四个功能:dumps、dump、loads、load

    import pickle  #pickle 用来序列化,几乎可以序列化所有的Python类型

    pickle是Python独有的序列化模块,所谓独有就是不能和其他语言进行交互,因为pickle将数据对象转化为bytes

    dumps、dump是进行序列化   loads、load进行反序列化

    dumps 、dump序列化示例:

    >>> import pickle
    >>> d=[1,2,3,4]
    >>> pickle.dumps(d)
    b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'

    dumps将所传入的变量的值序列化为一个bytes,然后,就可以将这个bytes写入磁盘或者进行传输。

    而dump则更加一步到位,在dump中可以传入两个参数,一个为需要序列化的变量,另一个为需要写入的文件。

    f=open('file_test','wb')
    >>> d=[1,2,3,4]
    >>> pickle.dump(d,f)
    >>> f.close()
    >>> f=opem('file_test','rb')
     f=open('file_test','rb')
    >>> f.read()
    b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'

    loads当我们要把对象从磁盘读到内存时,可以先把内容读到一个bytes,然后用loads方法反序列化出对象,也可以直接用load方法直接反序列化一个文件。

    例如:

    >>> d=[1,2,3,4]
    >>> r=pickle.dumps(d)
    >>> print(r)
    b'x80x03]qx00(Kx01Kx02Kx03Kx04e.'
    >>> pickle.loads(r)
    [1, 2, 3, 4]

    >>> d=[1,2,3,4]
    >>> f=open('file_test','wb')
    >>> pickle.dump(d,f)
    >>> f.close()
    >>> f=open('file_test','rb')
    >>> r=pickle.load(f)
    >>> f.close()
    >>> print(r)
    [1, 2, 3, 4]


    json模块

    如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

     json中的方法和pickle中差不多,也是dumps,dump,loads,load。使用上也没有什么区别,区别在于,json中的序列化后格式为字符。

    json示例:

    shelve 模块

    shelve模块是一个简单的K,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的Python数据格式

    例如:

    #!/usr/bin/env python
    # encoding: utf-8
    import shelve
    d = shelve.open('shelve_test')#打开一个文件
    class Test(object):
    def __init__(self,n):
    self.n = n

    t = Test(123)
    t2 = Test(123213213)

    name = ["alex","shidong","test"]

    d["test"] = name #持久化列表
    d["t1"] = t #持久化类
    d["t2"] =
    t2
    d.close()

    xml处理模块
    (修改和删除xml文档内容)xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单
    YAML模块

    configparser 模块 :用于生成和修改常见配置文档,当前模块的名称在Python3.x版本中变更为configparser
    #!/usr/bin/env python
    # encoding: utf-8
    import configparser
    #1、获取所有节点
    config = configparser.ConfigParser()
    config.read('shidong', encoding='utf-8')
    ret = config.sections()
    print(ret)

    #2、获取指定节点下所有的键值对
    config = configparser.ConfigParser()
    config.read('shidong',encoding='utf-8')
    ret = config.items('section1')
    print(ret)

    #3、获取指定节点下所有的键
    config = configparser.ConfigParser()
    config.read('shidong',encoding='utf-8')
    ret = config.options('section1')
    print(ret)

    #4、获取指定节点下指定key的值
    config = configparser.ConfigParser()
    config.read('shidong',encoding='utf-8')
    res = config.get('section1','k1')
    print(res)

    #5、检查、删除、添加节点
    config = configparser.ConfigParser()
    config.read('shidong',encoding='utf-8')
    has_opt = config.has_option('section1','k1')
    print(has_opt)

    #6、删除
    config.remove_option('section1','k1')
    config.add_section('shidong')
    config['shidong']['age'] = '29'

    config.write(open('shidong','w'))

    #7、设置
    config.set('section3','k10','123')
    config.write(open('shidong','w'))
    #8、创建配置文件
    #!/usr/bin/env python
    # encoding: utf-8
    import configparser
    config = configparser.ConfigParser()
    config["DEFAULT"] = {'ServerAliveInterval':'45',
    'Compression':'yes',
    'CompressionLevel':'9'
    }

    config['bitbucket.org'] = {}
    config['bitbucket.org']['User'] = 'hg'
    config['topsecret.server.com'] ={}
    topsecret = config['topsecret.server.com']
    topsecret['Host Port'] = '5002'
    topsecret['ForwardX11'] = 'no'
    topsecret['Value'] ='1024'
    config['DEFAULT']['ForwardX11'] = 'yes'
    with open('example.ini','w') as configfile:
    config.write(configfile)



    hashlib模块
    用于加密相关的操作,3.X里代替了md5模块和sha模块,主要提供SHA1,SHA224,SHA256,SHA384,SHA512
    ,MD5算法
    import hashlib
    >>> a = hashlib.md5() #先声明一下,用什么方法加密
    >>> a.update("Hello")
    >>> a.update("It's me")
    >>> a.digest
    <built-in method digest of _hashlib.HASH object at 0x7f968ef70468>
    >>> a.digest() #二进制
    ']xdexb4{/x92Zxd0xbf$x9cRxe3Brx8a'
    >>> a.hexdigest() #十六进制
    '5ddeb47b2f925ad0bf249c52e342728a'

    还不够?Python还有一个hmac模块,它内部对我们创建爱你key和内容在进行处理然后在加密
    (在原有算法上再加一层)多用于消息加密
    例如:
    >>> import hmac
    >>> a = hmac.new("secret_key")
    >>> a.update("test")
    >>> a.hexdigest()
    '067a732507f937494b66aea19ce9bfa3'


    Subprocess 模块
    Python 3.5之后才会有run()方法,run()方法用来执行命令
    在Python 2.7版本,无法使用run()方法,但是可以使用call方法代替
    call 命令:执行命令,返回状态码(0代表执行成功)
    例如:
    >>> import subprocess
    >>> subprocess.call("ifconfig")
    或者
    >>> subprocess.call(["df","-h"])
    再或者用源生的shell去执行
    >>> subprocess.call("ls",shell=True)

    示例:返回执行结果,并不是状态码,这时候就不能用call方法了,改用Popen方法加管道
    >>> a = subprocess.Popen("df -h",shell=True,stdout=subprocess.PIPE)
    >>> a
    <subprocess.Popen object at 0x7f968ef6fc50>
    >>> a.stdout
    <open file '<fdopen>', mode 'rb' at 0x7f96887880c0>
    >>> a.stdout.read()
    'Filesystem      Size  Used Avail Use% Mounted on /dev/sda2 
    48G   32G   14G  70% / tmpfs          
    91M  228K  491M   1% /dev/shm /dev/sda1      
    291M   34M  242M  13% /boot .host:/        
    362G  360G  1.8G 100% /mnt/hgfs '

    check_call 执行命令,如果执行状态码是0,则返回0,否则抛异常
    例如:
    >>> subprocess.check_call("ll -th",shell=True)
    /bin/sh: ll: command not found
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/lib64/python2.6/subprocess.py", line 505, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command 'll -th' returned non-zero exit status 127

    subprocess.Popen() :用于执行复发的系统命令
    用于两个进程之间的交互,示例:
    import subprocess
    a = subprocess.Popen(["python"],stdin=subprocess.PIPE,stdout=subprocess.PIPE
    ,stderr=subprocess.PIPE)
    a.stdin.write("print(Hello) ")
    a.stdin.write("print(Hello2) ")
    a.stdin.write("print(Hello3) ")
    a.communicate()


    logging模块
    logging日志可以分为五个级别,分别为:debug(),info(),warning(),error(),critical()
    #!/usr/bin/env python
    # encoding: utf-8
    import logging
    #打印到屏幕上
    #logging.warning("user attempted wrong password")
    #logging.critical("server is down")

    #把日志写到文件里
    logging.basicConfig(filename='shidong.log',level=logging.INFO)
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this ,too')


    #把日志写入到文件并加入执行时间
    logging.basicConfig(filename='shidong.log',level=logging.DEBUG,format='%(asctime)s %(message)s',datefmt='%m/%d/%Y %I:%M:%S %p')
    logging.debug('This message should go to the log file')
    logging.info('So should this')
    logging.warning('And this ,too')


    #如果想把日志输出到文件并打印到屏幕上,就需要一点点复杂的知识了需要用到handler
    #创建logging对象
    logger = logging.getLogger('TEST-LOG')
    logger.setLevel(logging.DEBUG)

    #创建handler,handler的作用是输出到指定目标
    ch = logging.StreamHandler()
    ch.setLevel(logging.DEBUG)

    #创建file handler,并设置级别
    fh = logging.FileHandler("access.log")
    fh.setLevel(logging.WARNING)

    #创建时间格式formatter
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

    #规定好格式后,把格式赋给对象
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)

    logger.addHandler(ch)
    logger.addHandler(fh)

    #'application' code 进行输出
    logger.debug('debug message')
    logger.info('info message')
    logger.warn('warn message')
    logger.error('error message')
    logger.critical('critical message')

    面向对象编程:的特性:
    1、封装
    封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。
    封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的
    信息进行隐藏。
    2、继承
    面向对象编程(OOP)语言的一个主要功能就是“继承”。继承是指这样一种能力:他可以使用现有类的所有功能,
    并在无需重新编写原来的类的情况下对这些功能进行扩展。
    通过继承创建的新类称为“子类”或“派生类”。
    被继承的类称为“基类”、“父类”或“超类”
    继承的过程,就是从一般到特殊的过程。
    要实现继承,可以通过“继承”(inheritance)和“组合”(Composition)来实现 。
    在某些OOP语言中,一个子类可以继承多个基类,但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过
    多级继承来实现
    继承概念的实现方式有三类:实现继承、接口继承和可是继承。
    %%实现继承是指使用基类的属性和方法而无需额外编码的能力;
    %%接口继承是指仅使用属性和方法的名称,但是子类必须提供实现的能力;
    %%可是继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
    抽象类(指基类/父类)仅定义将由子类创建的一般属性和方法
    OOP开发范式大致为:划分对象-->抽象类-->将类组织成为层次化结构(继承和合成)-->用类与实例进行设计和实现

    多态:
    多态就是父类(基类/抽象类)在特定的情况下可以访问子类

    object是Python中的顶级父类
    #!/usr/bin/env python
    # encoding: utf-8
    class Role(object):
    def __init__(self,name,role,weapon,life_value):
    #self初始化
    self.name = name
    self.role = role
    self.weapon = weapon
    self.life_val = life_value

    def buy_weapon(self,weapon):
    print("%s is buying[%s]" % (self.name,weapon))
    self.weapon = weapon
    #p1 称为实例
    #把一个抽象的类变成一个具体的对象的过程叫实例化
    p1 = Role("SanJiang",'Police',"B10",90)
    t1 = Role("ChunYun",'Terrorist',"B11",100)
    p1.buy_weapon("AK47")
    t1.buy_weapon("B51")

    print("P1:",p1.weapon)
    print("T1:",t1.weapon)

    类变量与实例变量
    实例:
    #!/usr/bin/env python
    # encoding: utf-8
    class Role(object):
    # members = 0
    def __init__(self,name,role,weapon,life_value):
    #self初始化
    self.name = name
    self.role = role
    self.weapon = weapon
    self.life_val = life_value
    # Role.members +=1
    def buy_weapon(self,weapon):
    print("%s is buying[%s]" % (self.name,weapon))
    self.weapon = weapon
    # print(self.ac)
    #p1 称为实例
    #把一个抽象的类变成一个具体的对象的过程叫实例化
    p1 = Role("SanJiang",'Police',"B10",90)
    t1 = Role("ChunYun",'Terrorist',"B11",100)
    t2 = Role("T2",'Terrorist',"B17",100)
    t3 = Role("T3",'Terrorist',"B19",100)
    p1.buy_weapon("AK47")
    t1.buy_weapon("B51")
    p1.ac = "China Brand"#实例中设置ac
    t1.ac = "US Brand"#实例中设置ac

    Role.ac = "Janpanese Brand" #在类中设置ac,并且ac为全局变量
    #实例中设置变量,那么则会在实例的内存地址添加一个实例,实例
    #中不设置那么则用全局变量

    print("P1:",p1.weapon,p1.ac)
    print("T1:",t1.weapon,t1.ac)
    print("T2:",t2.ac,t2.weapon)
    print("T3:",t3.ac,t2.weapon)

    类的继承
    #!/usr/bin/env python
    # encoding: utf-8
    class SchoolMember(object):
    member_nums = 0
    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex
    self.enroll()

    def enroll(self):
    SchoolMember.member_nums+=1
    print("The [%s] school member [%s] is enrolled!" % (self.member_nums,self.name))
    def tell(self):
    print("Hello,my name is %s" %(self.name))
    class Teacher(SchoolMember):#继承父类SchoolMember
    def __init__(self,name,age,sex,course,salary):#如果不写则直接继承父类
    super(Teacher,self).__init__(name,age,sex)
    #SchoolMember.__init__(self,name,age,sex)这是旧式写法
    self.course = course
    self.salary = salary

    def teaching(self):
    print("Teacher [%s] is teaching [%s]" %(self.name,self.course))

    class Student(SchoolMember):
    def __init__(self,name,age,sex,course,tuition):
    super(Student,self).__init__(name,age,sex)
    self.course = course #self 代表的意思为实例
    self.tuition = tuition
    def pay_tuition(self):
    print("cao,student [%s] paying tuition [%s]" %(self.name,self.tuition))

    t1 = Teacher("shidong",28,"F","PY",1000000)
    t2 = Teacher("Alex",28,'N/A',"PY",100000)

    s1 = Student("SanJiang",23,"Female","python",20000)
    s2 = Student("BaoAn",23,'Femle',"python",9000)

    t1.tell()#继承后,可以调用父类的方法
    t1.teaching()
    s1.tell()
    s1.pay_tuition()























  • 相关阅读:
    python 线性回归(Linear Regression)预测波士顿房价
    python支持向量机分类MNIST数据集
    python朴素贝叶斯分类MNIST数据集
    感知机(perceptron)
    LMS Algorithm 最小均方算法
    线性回归(Linear Regression)和最小二乘法(ordinary least squares)
    KNN实现mnist、fashion mnist数据集的分类
    JavaScript一些常见的知识点
    用js做一个许愿墙
    js做留言板(可以评论 删除评论 评论时间)
  • 原文地址:https://www.cnblogs.com/sd880413/p/8034235.html
Copyright © 2011-2022 走看看