python基础语法(9)
内置模块
json
json模块中常用的有两个方法,分别为:
dumps()
将python中的字典类型转化为json对象。-
loads()
将json对象转化为字典类型。代码示例:
import json # 字典对象 dict_lesson={ "name":"python", "score":3 } # json.dumps 将Python 字典类型转换为 JSON 对象 # json.loads 将 JSON 对象转换为 Python 字典 print(dict_lesson['score']) json_lesson=json.dumps(dict_lesson) print(type(json_lesson)) #str print(type(json.loads(json_lesson))) #dict
-
dump()
将Python内置类型序列化为json对象后写入文件
代码示例:
# 写入文件
def writefile(user):
try:
with open('./util/users.json','w') as fp:
list_user = [user]
json.dump(list_user,fp)
fp.close()
except Exception as ex:
print(ex)
-
load()
读取文件中json形式的字符串元素 转化成python类型
代码示例:# 读取文件 def readfile(): try: with open('./util/users.json','r') as fp: content = json.load(fp) fp.close() return content except Exception as ex: print(ex)
文件读写
-
文件的打开和关闭open()
fp = open(file_name [,access_mode][,buffering])
各参数的细节:
- file_name: 要访问的文件名称,包括扩展名。
- access_mode: 打开文件的模式(只读r;写入w;追加a)默认为只读
- buffering:当它为0时不会有寄存,取1时访问文件会寄存,当大于1时,这个值就是寄存区的缓冲大小;为负值时说明寄存去缓冲大小为系统默认。
-
File对象的属性
# 打开一个文件 fo = open("foo.txt", "w") print "文件名: ", fo.name #返回true如果文件已被关闭,否则返回false。 print "是否已关闭 : ", fo.closed #返回被打开文件的访问模式。 print "访问模式 : ", fo.mode #如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 print "末尾是否强制加空格 : ", fo.softspace fo.close()
-
打开模式
标识 模式 说明 r 只读 文件不存在报错 w 只写 文件不存在,新建文件 a 追加 文件不存在,新建文件 r+ 可读写 文件不存在报错,先读取文件,然后才能写入文件,反之,写不进内容 w+ 可读写 写读取文件,然后就无法读文件了。。。。 a+ 可读写 同上,原因是文件指针的位置决定了
* r 就是直接打开已存在的文件,不存在会报错
* w 就是打开文件,文件如果不存在,就会新建一个文件
* r+ 是打开一个可读写的文件,文件必须存在,而且在读之后,需要加一句:f.seek(),不然会报错
## *******************************文件读写模式:r+ *********************************
f = open(unicode(r"C:\测试\2样.txt", "utf8"), 'r+')
str1 = f.read()
print str1
f.seek(0,0)
f.write("this is seek(0)")
# f.flush()
f.close()
- write()
用来将任意字符写入一个打开的文件。不局限与文字。
write()方法写入的位置取决于光标的位置,写入时不换行。
如果写入的不是字符串,需要先进行类型转换:
f = open("/tmp/foo1.txt", "w")
value = ('www.runoob.com', 14)
s = str(value)
f.write(s)
f.flush()
# 关闭打开的文件
f.close()
-
read()读取文件
fo=open('content2.txt','r+') str=fo.read() print(str) fo.close()
readline() readlines()
fo=open('content2.txt','r+')
str1=fo.readline()
#指针移动到第二行,读出所有行放到一个数组中
str2=fo.readlines()
print(str1)
print(str2)
fo.close()
```
```
for line in fo:
print(line, end='')
tell()
返回文件对象所在的位置,它是从文件开头开始算起的字节数。-
seek()
用来改变当前的文件位置。
- seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
- seek(x,1) : 表示从当前位置往后移动x个字符
- seek(-x,2):表示从文件的结尾往前移动x个字符
-
pickle模块实现了基本的数据序列和反序列化
通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储。
通过pickle模块的反序列化操作,我们能够从文件中创建上一次程序保存的对象。
基本接口:
pickle.dump(obj, file, [,protocol]
import pickle
# 使用pickle模块将数据对象保存到文件 data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close()
read_file.py
``` #!/usr/bin/python3 import pprint, pickle #使用pickle模块从文件中重构python对象 pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) print(data1['a']) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()
-
flush()刷新缓冲区
将缓冲区中的数据立刻写入文件,同时清空缓冲区。
一般来说,.close()方法会自动调用flush()方法。
如果需要关闭前刷新缓冲区,就可以使用flush()方法。