zoukankan      html  css  js  c++  java
  • Input and Output, Python Tutorial阅读笔记(4)

      参考资料:

      Python官网Tutorial

      注:由于感觉自己的Python还没有学通透,在看项目的代码时还是有一些困难。所以想看一下Python官网的Tutorial自学一下,我在读的时候也是略过了自己已经会的地方,所以我写的东西都是自己学到的新东西。

      规范:黑体x)表示自己学到的东西模块,是一个大概的区分。4.1,4.2等表示在Tutorial中的位置。

      1)7.1 Fancier Output Formatting

      这一节其实就是讲解了一种特殊的字符串表示方式,即在字符串前面加上一个f:f"XXX"

      之前我们说,在字符串前面加上r可以表示这是一个raw字符串,防止了转义字符的干扰。那么在字符串前面加上f的作用其实也是Python的一种特性,如下例:

    >>> year = 2016
    >>> event = 'Referendum'
    >>> f'Results of the {year} {event}'
    'Results of the 2016 Referendum'
    

      可见使用这种“Fancier Output Formatting”的要素有两个:

      1. 字符串前面一定要加上一个小写的f

      2. 字符串里面有中括号{},且括号内会有一个对象,也就是我们输出转换的对象

      

      2)另一种格式化字符串的方法,如下例:

    >>> yes_votes = 42_572_654
    >>> no_votes = 43_132_495
    >>> percentage = yes_votes / (yes_votes + no_votes)
    >>> '{:-9} YES votes  {:2.2%}'.format(yes_votes, percentage)
    ' 42572654 YES votes  49.67%'
    

      一看就会,值得注意的是这一次字符串里面的{}里,内容是不是丰富了许多?丰富了哪些内容?

      1. 多了一个冒号:冒号右边的表示 格式 冒号左边的表示 对象

      2. 既然右边的表示格式,那么格式有哪些?这个我写在文末

      3. 既然左边的表示对象,那么可以怎么表示?

      这里回答 3. 答案是,可以是 0 , 1, 2... 也可以是一个标志符,看了下例就懂了:

    >>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
                                                           other='Georg'))
    The story of Bill, Manfred, and Georg.
    

      

      3)7.2.2 Saving structured data with json

      下面讲一下如何将结构化的数据保存到文件系统中。这里使用的是json,它将一切的数据保存为文本文件json。这个过程叫做serializing。

      但是,json一般仅仅用来保存列表和字典。并且,你不要认为它保存的是文本,读取到内存中之后读到的对象都是str,对象的类型可以有不同种!比如int,float等。如下例:

    >>>A = json.dumps([1.1, "simple", "list"])
    >>>type(A)
    <class 'str'>
    >>>B = json.loads(A)
    >>>type(B[0])
    <class 'float'>
    

      保存到文件中仅需把dumps和loads换成dump和load,调用的时候加一个文件句柄参数。

      

      4)前面说到,json大多用来保存简单的list和dict对象,复杂的对象它是不能够保存的。(因为json保存的是文本,有些数据结构再复杂的文本也没法保存啊!)此时我们需要使用pickle这个包。理论上来说它能将内存中的一切对象保存到文件系统中。

      看下例:

    >>> import torch
    >>> import pickle
    >>> A = torch.tensor([1.2])
    >>> B = pickle.dumps(A)
    >>> B
    b'x80x04x95x81x01x00x00x00x00x00x00x8cx0ctorch._utilsx94x8cx12_rebuild_tensor_v2x94x93x94(x8c
    torch.storagex94x8cx10_load_from_bytesx94x93x94Cxfdx80x02x8a
    lxfcx9cFxf9 jxa8Px19.x80x02Mxe9x03.x80x02}qx00(Xx10x00x00x00protocol_versionqx01Mxe9x03X
    x00x00x00little_endianqx02x88X
    x00x00x00type_sizesqx03}qx04(Xx05x00x00x00shortqx05Kx02Xx03x00x00x00intqx06Kx04Xx04x00x00x00longqx07Kx04uu.x80x02(Xx07x00x00x00storageqx00ctorch
    FloatStorage
    qx01X
    x00x00x002954476202240qx02Xx03x00x00x00cpuqx03Kx01Ntqx04Q.x80x02]qx00X
    x00x00x002954476202240qx01a.x01x00x00x00x00x00x00x00x9ax99x99?x94x85x94Rx94Kx00Kx01x85x94Kx01x85x94x89x8cx0bcollectionsx94x8cx0bOrderedDictx94x93x94)Rx94tx94Rx94.'
    

      和json明显不同,pickle将文件保存为了二进制01串,只要你能dump成功,你就能在任何其他地方load回来,然后直接或间接使用这个对象。

      注意了,不是所有的情况都能dump成功的。pickle是要依据序列化协议的!但大多数情况都是可以成功的,只要对象继承自object。

      下面是在另一个文件中读取pickle的例子:

       可见读取到了正确的torch.Tensor对象!我这里读取的方法其实麻烦了,标准的直接做法如下:(也是要注意区分load, loads, dump, dumps的区别) 

  • 相关阅读:
    C/C++,彩色图像小游戏。
    js 调用百度地图,并且定位用户地址,显示省市区街,经纬度
    C/C++ 双精度double 数据相加出错缺陷解释
    辗转相除法求最大公约数,非goto
    如何用 js 获取table 或者其他块状标签的 宽和高
    如何用 ajax 连接mysql数据库,并且获取从中返回的数据。ajax获取从mysql返回的数据。responseXML分别输出不同数据的方法。
    C++ 连接数据库的入口和获取列数、数据
    Win10:如何修改双网卡的优先级?
    如何拉动内需,击中客户深层需求,4个经典案例分析!
    单点登录SSO简介
  • 原文地址:https://www.cnblogs.com/chester-cs/p/14206496.html
Copyright © 2011-2022 走看看