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()























  • 相关阅读:
    (Java实现) 洛谷 P1106 删数问题
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
    (Java实现) 洛谷 P1553 数字反转(升级版)
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1051 谁拿了最多奖学金
    (Java实现) 洛谷 P1106 删数问题
    目测ZIP的压缩率
  • 原文地址:https://www.cnblogs.com/sd880413/p/8034235.html
Copyright © 2011-2022 走看看