本节学习Python的格式化输出,文件操做以及json的简单用法python
1.格式化输出json
将非字符串类型转换成字符串,可使用函数: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()来设置字符串的对齐方式app
>>> 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 30this
咱们还有一种格式话输出的形式,以下所示:spa
>>> print "pi is %.2f" %(3.1415926) pi is 3.14
2.文件操做操作系统
咱们有一个名为1.txt的文件,咱们能够经过以下语句打开它:3d
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\n', 'this is second line\n', '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"]
四、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"
但这种方法感受效率有点慢。。。。