一. 文件读写:
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))