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(方法名,参数)(方法所属对象)

  • 相关阅读:
    【Python-虫师】自动化测试模型--参数化
    【Loadrunner】【浙江移动项目手写代码】代码备份
    虫师的性能测试思想html网页学习
    Loadrunner之https协议录制回放报错如何解决?(九)
    【Python虫师】多窗口定位
    【虫师讲Selenium+Python】第三讲:操作测试对象
    【虫师Python】第二讲:元素定位
    【小甲鱼】【Python】正则表达式(三)
    【小甲鱼】【Python】正则表达式(二)
    js提交数据时需判断是点击事件还是回车键
  • 原文地址:https://www.cnblogs.com/burningcarbon/p/12432581.html
Copyright © 2011-2022 走看看