• (Python )格式化输出、文件操作、json


    本节学习Python的格式化输出,文件操作以及json的简单用法


    1.格式化输出


    将非字符串类型转换成字符串,可以使用函数:str() 或者repr() ,(这两个函数的区别目前我还没搞懂,求解答

    >>> str([1,2,3,4])
    '[1, 2, 3, 4]'
    >>> repr([1,2,3,4])
    '[1, 2, 3, 4]'
    >>> str(10)
    '10'
    >>> repr(10)
    '10'

    可以使用str.ljust() 、str.rjust()、str.center()来设置字符串的对齐方式

    >>> for x in range(1,11):
        print str(x).ljust(2),str(x*x).ljust(3),str(x*x*x).ljust(4)
    
        
    1  1   1   
    2  4   8   
    3  9   27  
    4  16  64  
    5  25  125 
    6  36  216 
    7  49  343 
    8  64  512 
    9  81  729 
    10 100 1000

    我们也可以使用str.format()来设置字符串的对齐方式({}中填充^、<、>分别代表居中、左对齐、右对齐):

    >>> for x in range(1,11):
        print "{0:<2d} {1:<3d} {2:<4d}".format(x,x*x,x*x*x)
    
        
    1  1   1   
    2  4   8   
    3  9   27  
    4  16  64  
    5  25  125 
    6  36  216 
    7  49  343 
    8  64  512 
    9  81  729 
    10 100 1000

    str.format() 的其他使用方法:

    >>> print "his name is {},his age is {}".format('Jack',30)
    his name is Jack,his age is 30
    >>> print "his name is {1},his age is {0}".format(30,'Jack')
    his name is Jack,his age is 30
    >>> print "his name is {name},his age is {age}".format(age=30,name='Jack')
    his name is Jack,his age is 30
    >>> print "pi is {0:.2f}".format(3.1415926)
    pi is 3.14
    >>> t={'name':'Jack','age':30}
    >>> print "his name is {0[name]:s},his age is {0[age]:d}".format(t)
    his name is Jack,his age is 30
    >>> print "his name is {name:s},his age is {age:d}".format(**t)
    his name is Jack,his age is 30

    我们还有一种格式话输出的形式,如下所示:

    >>> print "pi is %.2f" %(3.1415926)
    pi is 3.14

    2.文件操作


    我们有一个名为1.txt的文件,我们可以通过如下语句打开它:

    f=open("1.txt","r")     

    open函数的第二个参数是可选参数,可以选择如下几种模式:

    r:只读模式

    w:写模式 ,如果文件不存在,自动创建

    a:追加

    r+:读写

    注意:在window操作系统下,该参数可以是:b,代表以二进制形式打开文件,所以有了组合:rb,wb 或r+b

    打开后,我们读取其中的全部内容:

    f.read()

    如果我们想一行一行的读取,可以使用f.readline()或者f.readlines()

    f.readline():每次只读取一行

    >>> f=open("1.txt","r")
    >>> print f.readline()
    this is first line
    
    >>> print f.readline()
    this is second line
    
    >>> f.close()

    f.readlines():读取所有行,并保存到一个列表中

    >>> f=open("1.txt","r")
    >>> print f.readlines()
    ['this is first line
    ', 'this is second line
    ', 'this is third line']
    >>> f.close()

    注意:如果我们使用的是读写模式(r+、w+ 或者a+的话),在写入后,马上读取,只会读取一个EOF

    >>> f=open("1.txt","r+")
    >>> f.write("this is first line")
    >>> print f.read()
    
    >>> 

    出现上述情况的原因是当调用完f.write()函数后,指针移到了文件内容的末尾处。此时读取的话就只会读取到EOF,解决办法是设置指针到文件的起始位置

    >>> f=open("1.txt","r+")
    >>> f.write("this is first line")
    >>> f.seek(0)
    >>> print f.read()
    this is first line

     打开文件后,必须要记得使用f.close() 函数来关闭文件以释放资源。 一个好的使用习惯是,使用with open('file','mode') as f的形式来打开文件,这样在with代码块结束后,会自动关闭文件

    >>> with open("1.txt","r+") as f:
          print f.read()
    
        
    this is first line
    >>> print f.closed
    True

    3.json 


    我们在读取文件的时候,读取到的数据类型都是string类型,但是有时候,我们可能需要存储一些复杂的数据类型,如:列表、字典到文件中,这时候如果我们读取文件的时候,返回的是字符串,我们还必须使用list(str)将其转换成列表或字典类型,这样的话,使得我们的操作变得复杂。而json正好可以解决这个问题

    我们使用json 可以使数据结构转换成字符串表示,这被称为序列化,我们也可以让字符串表示转换成相应的数据结构,这被称为:反序列话

    我们可以使用json.dumps(x) 来将对象x序列化成json的字符串表示形式:

    >>> json.dumps([1,2,3,'abbbb'])
    '[1, 2, 3, "abbbb"]'

    我们还可以使用json.dump(x,f) 来将序列化的x写入文件f中:

    >>> f=open("1.txt","r+")
    >>> x=json.dumps([1,2,3,'abbbb'])
    >>> json.dump(x,f)
    >>> f.seek(0)
    >>> print f.read()
    "[1, 2, 3, "abbbb"]"

    我们想要反序列的话,可以使用x = json.load(f)

    >>> x=json.load(f)
    >>> print x
    [1, 2, 3, "abbbb"]

     4、cPickle和Pickle

    也是python的标准模块。cPickle和pickle的功能相似,只是cPickle是用c语言编写的。可以使用它们在文件中存储python的任何对象。之后可以把对象完整的取出来。这被称为持久的存储对象。

    例子:将一个列表写进test.txt中

    import cPickle as p
    import os
    filePath="E:\study\test.txt"
    testList=[1,23,"teststr"]
    f=file(filePath,"w")
    p.dump(testList,f)
    f.close()

    我们再把这个列表从文件中取出来:

    import cPickle as p
    import os
    filepath="E:\study\test.txt"
    if os.path.exists(filepath):
        f=open(filepath,"r")
        print p.load(f)
        f.close()
    else:
        print "file is not exist"
    

    结果:[1, 23, 'teststr'],这样列表就成功的取出来啦。

    注意:如果将import cPickle as p 替换成import json as p,那么最后取出对象打印出来的结果是:[1, 23,u 'teststr'],这是因为json库把json文件load成了Unicode对象。所以要变成str对象的话需要自己encode,方法可以这样:

    import json as p
    import os
    filepath="E:\study\test.txt"
    if os.path.exists(filepath):
        f=open(filepath,"r")
        getlist= p.load(f)
        getStrList=[]
        for i in getlist:
            if type(i)==type(u'a'):
                i= i.encode("utf-8") #convert Unicode to utf-8
            getStrList.append(i)
        print getStrList
        f.close()
    else:
        print "file is not exist"
    

     但这种方法感觉效率有点慢。。。。 

      

  • 相关阅读:
    解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
    qemu vm setup network(ssh) with buildroot
    C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size
    C 利用strtok, feof 截取字符串
    LINUX C: 获取本地指定网卡的IP地址
    C语言比较好的风格梳理
    perf-perf stat用户层代码分析
    内核调试-perf introduction
    内核调试-ftrace introduction
    【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)
  • 原文地址:https://www.cnblogs.com/Lival/p/4414926.html
Copyright © 2020-2023  润新知