zoukankan      html  css  js  c++  java
  • python实用技巧总结(二)

    十三、去掉字符串中特定的字符

      方法一:字符串strip(),rstrip(),lstrip()去掉两端或某一端字符

      方法二:字符串切片加拼接

      方法三:字符串的replace()方法或正则表达式re.sub()删除任意子串

      方法四:字符串的translate()方法,可以同时删除多种不同字符

    十四、python文本文件操作

      文件打开:文件对象名=open(name[, mode[, buffering]])

        name : 一个包含了你要访问的文件名称的字符串值。

        mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

        buffering :

          如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。

          如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大 小。如果取负值,寄存区的缓冲大小则为系统默认。

      文件关闭:文件对象名.close()

        flush和close的区别

          flush():将缓冲区的数据刷到目的地中后,流可以使用。

          close():将缓冲区的数据刷到目的地中后,流就关闭了,该方法主要用于结束调用的底层资源。这个动作一定做。

     

    十五、设置文件缓冲

      全缓冲:open函数的buffering设置为大于1的整数,该数为缓冲区大小

      行缓冲:open函数的buffering设置为1(文本模式下才可以)

      无缓冲:open函数的buffering设置为0

    十六、将文件映射到内存

      目的:

        1.把文件映射到内存中实现对二进制文件的随机访问

        2.某些嵌入式设备的寄存器被编址到内存地址空间,可以通过映射去访问这些寄存器

        3.多个进程映射到同一个文件以实现进程通信的目的

      解决方案

        使用标准库的mmap.mmap()函数,将文件映射到进程的内存地址空间

          m=mmap.mmap(fileno, length[, flags[, prot[, access[, offset]]]])

            fileno:文件编码,可通过文件对象.fileno()得到

            length:文件描述符,可以是file对象的fileno()方法,或者来自os.open()

              要映射文件部分的大小(以字节为单位),这个值为0,则映射整个文件,如果大小大于文件当前大小,则扩展这个文件。

            flags:

              MAP_PRIVATE:这段内存映射只有本进程可用;

              mmap.MAP_SHARED:将内存映射和其他进程共享,所有映射了同一文件的进程,都能够看到其中一个所做的更改;  

            prot:mmap.PROT_READ, mmap.PROT_WRITE 和 mmap.PROT_WRITE | mmap.PROT_READ。最后一者的含义是同时可读可写。

            access:在mmap中有可选参数access的值有

              ACCESS_READ:读访问。

              ACCESS_WRITE:写访问,默认。

              ACCESS_COPY:拷贝访问,不会把更改写入到文件,使用flush把更改写到文件。

    十七、使用临时文件

      临时文件不用命名,关闭后会被自动删除,在文件系统中访问不到

      解决方案标准库tempfile.TemporaryFile(匿名),NamedRemporaryFile(命名)二者的区别:

        与TemporaryFile不同的是,NamedTemporaryFile 会生成真的文件

        TemporaryFile 不在硬盘上的生成真正文件,而是写在内存中

     

      示例

        from tempfile import TemporaryFile  , NamedTemporaryFile

        # 1. 读取

        f = TemporaryFile(mode="w+")

        #   参数:

        #       1). mode="w+"   允许 打开的模式, 默认 为 w+b 模式

        #           w     写模式

        #           w+    读写模式

        #           w+b   读写 Bytes 模式

        #       2). buffering=-1     缓冲区大小, -1 是不限制

        #       3). encoding=None    读取的文件的字符编码

        f.write("abcdefg hijkmlm opqist uvwxyz")  # 写入

        f.seek(0)     # 将 光标 切换到开始

        # line = f.readlines()  # 按照 每一行进行读取

        line = f.read()  # 读取全部

        print(line)

     

        #有一个参数delete=True 时,变量被清除时,生成的文件就会被删除,delete=False 时,文件不会被删除

        from tempfile import NamedTemporaryFile

        # 1. 读取

        f = NamedTemporaryFile(mode="w+", dir=r"D:data1_RPA_Project")

        #   参数:

        #       1). mode="w+"   允许 打开的模式, 默认 为 w+b 模式

        #           w     写模式

        #           w+    读写模式

        #           w+b   读写 Bytes 模式

        #       2). buffering=-1      缓冲区大小, -1 是不限制

        #       3). encoding=None     读取的文件的字符编码

        #       4). dir=None          临时文件存放的文件的位置

        #       5). delete=True       变量删除后 将文件删除, delete=False 时,变量删除时不会删除

        print(f.name)  # 打印文件名

        f.write("abcdefg hijkmlm opqist uvwxyz")  # 写入

        f.seek(0)     # 将 光标 切换到开始

        # line = f.readlines()  # 按照 每一行进行读取

        line = f.read()  # 读取全部

        print(line)

    十八、实例属性做类型检查

      

      目的:希望像静态类型语言那样,对他们的实例属性做类型检查

      方案:使用描述符

    十九、常用装饰器

      @property

        使调用类中的方法像引用类中的字段属性一样。被修饰的特性方法,内部可以实现处理逻辑,但对外提供统一的调用方式。遵循了统一访问的原则。

        此外,@property可以用来实现类似与Java中set和get方法

      @staticmethod

        将类中的方法装饰为静态方法,即类不需要创建实例的情况下,可以通过类名直接引用。到达将函数功能与实例解绑的效果。

      @classmethod

        类方法的第一个参数是一个类,是将类本身作为操作的方法。类方法被哪个类调用,就传入哪个类作为第一个参数进行操作。

    二十、如何将变量转变为同名字符串

      解决方案:

        字典化然后提取key名

        此方法无法抽象成函数

      示例

        >> abc = 376         

         # 第一步:字典化

        >> dict(abc = abc)# 最骚的就是这步了

        >> {'abc': 376} # 所得的字典 

        #第二步:取字典的key

        >> dict(abc = abc).keys()

        >> dict_keys(['abc'])# 得到一个字典key版的字符串

        # 第三步:list化

        >> list(dict(abc = abc).keys())

        >> ['abc']# 得到一个list

        # 最后

        >> list(dict(abc = abc).keys())[0]

        >> 'abc' # 你要的东西:变量名的字符串

      

    二十一、环状数据结构中管理内存

      问题:例如循环链表、图等环状数据结构中存在变量之间的相互引用或者循环引用,在不需要的时候不会被自动回收,造成内存的大量占用

      解决方案:使用弱引用weakref模块,弱引用也能引用对象,但不会增加引用计数,当变量之间全部都是弱引用时,会被系统自动回收

    二十二、通过实例方法名字字符串调用方法

      方案一:调用getattr(对象,属性名)(参数)

      方案二:operator模块的methodcaller(方法名,参数)(方法所属对象)

  • 相关阅读:
    mysql常用基本命令
    mysql8.0.13下载与安装图文教程
    k8s ingress 增加跨域配置
    Jenkins 备份恢复插件 thinBackup 使用
    k8s HA master 节点宕机修复
    nginx 跨域问题解决
    mongodb 3.4.24 主从复制
    k8s 线上安装 jenkins并结合 jenkinsfile 实现 helm 自动化部署
    k8s helm 运用与自建helm仓库chartmuseum
    centos6 源码安装 unzip
  • 原文地址:https://www.cnblogs.com/burningcarbon/p/12432581.html
Copyright © 2011-2022 走看看