• 异步(回调 vs. 轮询) vs. 同步

    文件读写

    读文件

  • f = open('test.txt', 'r')传入文件名和标识符

  • f.read()可以一次读取文件的全部内容,用一个str对象表示
  • f.close()文件使用后必须关闭,因为文件对象会占用操作系统的资源,同一时间能打开的文件数量也是有限的

    1. with open('/path/to/file', 'r') as f:
    2. 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')

    操作文件和目录

  1. # 查看当前目录的绝对路径:
  2. >>> os.path.abspath('.')
  3. '/Users/michael'
  4. # 在某个目录下创建一个新目录,首先把新目录的完整路径表示出来:
  5. >>> os.path.join('/Users/michael', 'testdir')
  6. '/Users/michael/testdir'
  7. # 然后创建一个目录:
  8. >>> os.mkdir('/Users/michael/testdir')
  9. # 删掉一个目录:
  10. >>> 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()返回一个strdump()可以直接吸入一个file-like Object;同理,loads()load()

  • 可选参数default把任意一个对象编程一个可序列为JSON对象,json.dumps(s, **default**=lambda obj: obj.__dict__)