美文网首页
第五章 对象带你飞

第五章 对象带你飞

作者: Echo_f0a1 | 来源:发表于2019-11-17 23:36 被阅读0次

    5.1 存储

    5.1.1 文件

    ①打开

    如果Python程序运行结束,那么分配给这个程序的内存空间也会清空。为了长期持续地存储,Python必须把数据存储在磁盘中。如果把数据储存在磁盘中,即使断电或程序结束,数据依然存在。

    在Python中,我们可以通过内置函数open来创建文件对象。在调用open时,需要说明文件名,以及打开文件的方式:

    f=open(文件名,方式)

    文件名是文件存在于磁盘的名字,打开文件的常用方式有:

    "r" # 读取已经存在的文件

     "w" # 新建文件,并写入

     "a" # 如果文件存在,那么写入到文件的结尾。如果文件不存在,则新建文件并写入

    ②修改

    content = f.read(10)        # 读取10个字节的数据 

    content = f.readline()      # 读取一行 

    content = f.readlines()      # 读取所有行,储存在列表中,每个元素是一行。

    如果想写入一行,则需要在字符串末尾加上换行符。在UNIX系统中,换行符 为"\n"。在Windows系统中,换行符为"\r\n"。

    完成后close

    5.1.2 上下文管理器

    上下文管理器可以在不需要文件的时候,自动关闭文件。

    ①一般语法

    # 常规文件操作

    f = open("new.txt", "w") 

    print(f.closed) # 检查文件是否打开 

    f.write("Hello World!") 

    f.close() 

     print(f.closed) # 打印True

    ②上下文管理器

    # 使用上下文管理器 

    with open("new.txt", "w") as f: 

            f.write("Hello World!") 

     print(f.closed)

    任何定义了__enter__()方法和__exit__()方法的对象都可以用于上下文管理 器。下面,我们自定义一个类Vow,并定义它的__enter__()方法和__exit__()方 法。因此,由Vow类的对象可以用于上下文管理器:

    class Vow(object):    

       def __init__(self, text):        

            self.text = text    

       def __enter__(self):        

            self.text = "I say: " + self.text    # 增加前缀        

            return self                          # 返回一个对象    

      def __exit__(self,exc_type,exc_value,traceback):        

           self.text = self.text + "!"          #增加后缀    

      with Vow("I'm fine") as myVow:    

            print(myVow.text)    

    print(myVow.text)

    5.1.3 pickle 包

    通过pickle包,我们可以把某个对象保存下来,再存成磁盘里的文 件。

    实际上,对象的存储分为两步。第一步,我们将对象在内存中的数据直接抓取 出来,转换成一个有序的文本,即所谓的序列化。第二步,将 文本存入文件。等到需要时,我们从文件中读出文本,再放入内存,就可以获得原 有的对象。下面是一个具体的例子,

    ①首先是第一步序列化,将内存中的对象转换为文本流:

    import pickle     

    class Bird(object):

         have_feather = True     

         reproduction_method  = "egg"    

         summer        = Bird()                 # 创建对象

         pickle_string = pickle.dumps(summer)   # 序列化对象

    使用pickle包的dumps()方法可以将对象转换成字符串的形式。随后我们用字节文本的存储方法,将该字符串储存在文件。继续第二步:

    with open("summer.pkl", "wb") as f: 

           f.write(pickle_string)

    我们可以使用 dump()的方法,一次完成两步:

    import pickle

    class Bird(object): 

        have_feather = True 

        reproduction_method = "egg" 

     summer = Bird() 

     with open("summer.pkl", "w") as f: 

         pickle.dump(summer, f) # 序列化并保存对象

    5.2  一寸光阴

    5.2.1  time包

    标准库的time包提供了基本的时间 功能。下面使用time包:

    ①clock

    import time start = time.clock() 

    for i in range(100000):

        print(i**2)    

    end = time.clock() 

    print(end - start)

    ②sleep

    方法sleep()可以让程序休眠。根据sleep()接收到的参数,程序会在某时间间 隔之后醒来继续运行:

    import time 

    print("start") 

    time.sleep(10) # 休眠10秒 

    print("wake up")

    time包还定义了struct_time对象。该对象将挂钟时间转换为年、月、日、 时、分、秒等,存储在该对象的各个属性中,比如tm_year、tm_mon、tm_mday…… 下面几种方法可以将挂钟时间转换为struct_time对象:

    st = time.gmtime() #返回struct_time格式的UTC时间 

    st = time.localtime() #返回struct_time格式的当地时间,当地时区根据系 #统环境决定

    我们也可以反过来,把一个struct_time对象转换为time对象:

    s = time.mktime(st) # 将struct_time格式转换成挂钟时间

    相关文章

      网友评论

          本文标题:第五章 对象带你飞

          本文链接:https://www.haomeiwen.com/subject/efimictx.html