Python基础教程(十)和(十一)

自带电池

  • Python的模块,称为标准库;导入模块并不意味着在导入时执行某些操作,主要用于定义,例如变量,函数和类等。reload重新载入模块,但是应该尽可能避免重新载入模块

  • 包:为了组织好模块,可将其分组为包;包基本上就是另外一类模块,它们能包含其他模块

    当模块存储在文件中时(拓展名为.py),包就是模块所在的目录;为了让Python将其作为包对待,必须包含一个_init_py的文件(模块),如果其作为普通模块导入的话,文件的内容就是包的内容;直接把模块放在包目录内即可

  • __all__变量记录模块中有用的模块或函数,否则没有设定__all__,用import *语句默认会导入模块中所有不以下划线开头的全局名称

  • __doc__是调用模块或函数的文档字符串(写在模块开头),使用help与直接查看文档字符串相比,在于会获得更多信息

  • 标准库:

    • sys:访问多个和Python解释器紧密的变量和函数
    • os:访问到多个和操作系统联系紧密的变量和函数
    • fileinput:轻松遍历多个文件和流中的所有行
    • set, headq和deque:提供了3个有用的数据结构,集合也以内建的类型set存在
    • time:获取当前时间,并可进行时间日期操作和格式化
    • random:产生随机数,从序列中选取随机元素以及打乱列表元素
    • shelve:创建持续性映射,将映射内容保存在给定文件名的数据库中

文件和流

  • 打开文件:open(name[, mode[, buffering]])使用文件名作为唯一的强制参数,返回一个文件对象,mode和buffering参数

  • open函数的第三个参数(可选)控制着文件的缓冲,如果参数是0,I/O就是无缓冲;如果是1,I/O就是有缓冲(用内存代替硬盘,让程序更快)

  • 文件(或流)最重要的能力是提供或者接受数据,如果有一个名为f的类文件对象,那么就可以使用f.write和f.read(以字符串形式)写入和读取数据

          f=open('file.txt', 'w')
          f.write('Hello')
          f.read(4)       #输出'Hell'
          f.read()        #输出'o, World!'
          f.close()
    
  • 读取行:file.readline()读取单独一行(从当前的位置开始直到一个换行符出现,也读取这个换行符);readlines()读取一个文件中的所有行并将其作为列表返回

  • 写入行:writelines()传给其一个字符串的列表(任何序列或者可迭代的对象都行),其将所有的字符串写入文件(或流),程序不会增加新行,需要自己添加;另外,没有writeline方法,只能使用write()

  • 使用with语句可以打开文件,并且将其赋值到变量上,之后将数据写入语句题中的文件,文件在语句结束后会被自动关闭

          with open("somefile.txt") as somefile
              do_something(somefile)
    
  • 对文件内容进行迭代:

    • 按字节处理:

            char=f.read(1)
            while char
                process(char)
                char=read(1)
      
    • 按行操作:

            while True
                line=f.readline()
                if not line: break
                process(line)
      
    • 读取所有内容:

            for char in f.read()    #使用不带参数的read方法一次读取整个文件(整个文件当做一个字符串来读取)
                process(char)
                      
            for line in f.readlines()
                process(line)       #使用readlines方法(把文件读入一个字符串列表,在列表中每个字符串就是一行)
      
    • 使用fileinput实现懒惰行迭代

            for line in fileinput(filename)
                process(line)
      
  • 注意:

    • 使用print向文件内写入内容,会在提供的字符串后面增加新的行
    • 使用序列对一个打开的文件进行解包操作,把每行都放入一个单独的变量中
    • 在写文件后关闭了文件,确保数据被更新到了硬盘
  • 有很多迭代文件的内容,一般是迭代文本中的行