python 文件读写和序列化学习。
python文件读写
1 打开并且读取文件
f = open('openfile.txt','r')print(f.read())f.close()
<!--more-->
2 打开并且读取一行文件
f = open('openfile.txt','r')print(f.readline())f.close()
3 打开并以二进制形式读取文件
f = open('./openfile.txt','rb')print(f.read())f.close()
4 打开并自动关闭文件
with open('openfile.txt','r') as f:print(f.read())
5 读取所有行
f = open('openfile.txt','r')for line in f.readlines():print(line.strip())f.close()
6 以gbk方式读取文件
f = open('openfiles.txt','r',encoding='gbk' )print(f.read())f.close()
7 以追加方式写
with open('openfile.txt', 'a') as f:f.write('\n')f.write('Hello World!!!')
python IO操作
1 StringIO 写字符串
from io import StringIOf = StringIO()f.write('hello')f.write(' ')f.write('world !')print(f.getvalue() )
2 StringIO 读取字符串
from io import StringIOf = StringIO("Hello\nWorld\nGoodBye!!")while True:s = f.readline()if(s==''):breakprint(s.strip())
3 BytesIO 读写二进制字符
from io import BytesIOf = BytesIO()f.write('中文'.encode('utf-8') )print(f.getvalue())from io import BytesIOf = BytesIO(b'\xe4\xb8\xad\xe6\x96\x87')f.read()
python环境变量和目录
1 打印系统的名字和环境变量
import osprint(os.name)print(os.environ)
2 获取指定key值得环境变量
print(os.environ.get('PATH'))
3 相对路径转化绝对路径
print(os.path.abspath('.'))
4 在某个目录下创建一个新的目录
#首先把新目录的完整路径表示出来print(os.path.join('/Users/michael','testdir') )# 然后创建一个目录:#print(os.mkdir('/Users/michael/testdir') )# 删掉一个目录:#print(os.rmdir('/Users/michael/testdir') )
5 路径切割
print(os.path.split('/path/to/file.txt') )print(os.path.splitext('/path/to/file.txt') )
6 文件重命名和删除
#print(os.rename('test.txt', 'test.py') )#print(os.remove('test.py'))
7 列举当前目录下所有目录和py文件
print([x for x in os.listdir('.') if os.path.isdir(x) ])print([x for x in os.listdir('.') if os.path.isfile(x) and os.path.splitext(x)[1] == '.py'])
python序列化
1 序列化为二进制
import pickled = dict(name='Bob', age=20, score=88)print(pickle.dumps(d))
2 序列化写入文件
f = open('openfile3.txt','wb')print(pickle.dump(d, f) )f.close()
3 反序列化读取文件
f = open('openfile3.txt','rb')d = pickle.load(f)f.close()print(d)
4 序列化为json
import jsonclass Student(object):def __init__(self, name, age, score):self.name = nameself.age = ageself.score = scoredef convertFunc(std):return {'name':std.name,'age':std.age,'score':std.score}s = Student('Bob', 20, 88)print(json.dumps(s,default=convertFunc))print(json.dumps(s,default=lambda obj:obj.__dict__))
5 反序列化
def revert(std):return Student(std['name'], std['age'], std['score'])json_str = '{"age": 20, "score": 88, "name": "Bob"}'print(json.loads(json_str, object_hook=revert ) )