python学习笔记(9) - IO编程
python学习笔记(九) - IO编程
一. 文件读写:
1. 读文件:
try: f = open('D:\\1.txt', 'r') # 读取普通文件 f = open('D:\\1.jpg', 'rb') # 读取二进制文件 f.read() finally: if f: f.close() with open('D:\\1.txt', 'r') as f: # 使用with会自动调用close for line in f.readlines(): # readlines可以读取一行 print(line.strip()) # 把末尾的'\n'删掉 import codecs with codecs.open('D:\\1.txt', 'r', 'gbk') as f: # 使用codecs可以指定编码 for line in f.readlines(): print(line.strip())2. 写文件:
f = open('d:\\1.txt', 'w') # 写二进制位wb f.write('Hello, world!') f.close()
二. 操作文件和目录:
python的os模块封装了操作系统的目录和文件操作,要注意这些函数有的在os模块中,有的在os.path模块中
import os print os.environ # 获取操作系统的环境变量 print os.getenv('PATH') # 获取环境变量中path的值 print os.path.abspath('.') # 查看当前目录的绝对路径 os.mkdir('d:\\test') # 然后创建一个目录 os.rmdir('d:\\test') # 删掉一个目录 print os.path.join('d:\\test', 'tt') # 把两个路径合并成一个 d:\test\tt print os.path.split('d:\\test\\1.txt') # 拆分路径('d:\\test', '1.txt') print os.path.splitext('d:\\test\\1.txt') # 获取拓展名 ('d:\\test\\1', '.txt')
三. 序列化
try: import cPickle as pickle # 导入cpickle(c语言写的) except ImportError: import pickle # 导入失败就导入pickle(python写的) d = dict(name='Bob', age=20, score=88) f = open('d:\\dump.txt', 'wb') pickle.dump(d, f) # 数据序列化到文件 f.close() f = open('d:\\dump.txt', 'rb') d = pickle.load(f) # 数据反序列化到内存 f.close() print d
四. JSON:
JSON和python对象之间转换:
import json d = dict(name='Bob', age=20, score=88) # 序列化python为JSON格式 print json.dumps(d) # {"age": 20, "score": 88, "name": "Bob"} # JSON反序列化成python对象 json_str = '{"age": 20, "score": 88, "name": "Bob"}' print json.loads(json_str) # {u'age': 20, u'score': 88, u'name': u'Bob'}
定制JSON序列化和反序列化:
import json class Student(object): def __init__(self, name, age, score): self.name = name self.age = age self.score = score # 定制JSON序列化 def student2dict(std): return { 'name': std.name, 'age': std.age, 'score': std.score } s = Student('Bob', 20, 88) print(json.dumps(s, default=student2dict)) # 定制反序列化JSON def dict2student(d): return Student(d['name'], d['age'], d['score']) json_str = '{"age": 20, "score": 88, "name": "Bob"}' print(json.loads(json_str, object_hook=dict2student))