-
文件读写
读文件
f = open('test.txt', 'r')
传入文件名和标识符f.read()
可以一次读取文件的全部内容,用一个str
对象表示f.close()
文件使用后必须关闭,因为文件对象会占用操作系统的资源,同一时间能打开的文件数量也是有限的with open('/path/to/file', 'r') as f:
print(f.read())
可以反复调用
read(size)
方法,每次最多读取size个字节的内容;一次读取所有内容并按行返回list则用readlines
fuke-like Object
file-like Object不要求从特定类继承,只要写个
read()
方法就行StringIO
就是在内存中创建的file-like Object,常用作临时缓冲二进制文件
要读取如图片、视频等二进制文件,用
'rb'
模式打开文件即可f.read()
可以一次读取文件的全部内容,用一个str
对象表示字符编码
读取非UTF8编码的文本文件,需要给
open()
函数传入encoding
参数;当文本文件中可能夹杂了一些非法编码的字符时,open()
函数还接收一个errors
参数表示遇到编码错误后如何处理f.read()
可以一次读取文件的全部内容,用一个str
对象表示写文件
写文件和读文件一样,唯一区别是调用
open()
函数时传入识别符'w'
或'wb'
表示写文本文件或写二进制文件只有调用
close()
方法时操作系统才保证把没有写入的数据全部写入磁盘StringIO和ByteIsO
StringIO
StringIO顾名思义就是在内存中读写str
BytesIO
操作二进制数据就需要使用BytesIO,写入的不是str,而是经过UTF-8编码的bytes
操作文件和目录
环境变量
在操作系统中定义的环境变量全部保存在
os.environ
,要获取某个环境变量的值可以调用os.environ.get('key')
操作文件和目录
# 查看当前目录的绝对路径:
>>> os.path.abspath('.')
'/Users/michael'
# 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
>>> os.path.join('/Users/michael', 'testdir')
'/Users/michael/testdir'
# 然后创建一个目录:
>>> os.mkdir('/Users/michael/testdir')
# 删掉一个目录:
>>> os.rmdir('/Users/michael/testdir')
- 把两个路径合成一个时不要直接拼字符串,而要通过
os.path.join()
函数来正确处理不同操作系统的路径分隔符 os.path.splitext()
可以直接得到文件的扩展名列出当前目录下的所有
.py
文件[x **for** x **in** os.listdir('.') **if** os.path.isfile(x) **and** os.path.splitext(x)[1]=='.py']
序列化
把变量从内存中变成可存储或传输的过程称之为序列化pickling
pickle.dumps()
方法把任意对象序列化成一个bytes
,然后可以把这个bytes
写入文件,或者用pickle.dump()
把对象序列化后写入file-like object要把对象从磁盘读到内存时,可以先把内容读到一个
bytes
,然后用pickle.loads()
方法反序列化出对象,也可以用pickle.load()
方法从一个file-like object中直接反序列化出对象JSON
json.dumps()
返回一个str
,dump()
可以直接吸入一个file-like Object;同理,loads()
或load()
- 可选参数
default
把任意一个对象编程一个可序列为JSON对象,json.dumps(s, **default**=lambda obj: obj.__dict__)