Python 基础教程(第二版)(第十~十一章)

Python 基础教程(第二版)(第十~十一章)

第十章

  1. 包(package):当模块存储在文件中时(扩展名 .py),包就是模块所在的目录,但必须包含一个名为 _init_.py 的文件。
  2. 探究模块
    • dir : 要查看模块所包含的内容,dir函数会将对象多有特性列出。
    • _all_:包含一个列表,定义了模块的共有接口(public interface)。在模块中设置__all__,使用其他模块导入该模块的时候(from * 这种形式导入),只能导入 __all__中设定的变量、函数和类。
    • help():查看函数或模块用途的详细说明。
    • _file_属性:可以查看模块的绝对路径。
  3. 标准库
    • sys module
      • sys.argv:包括传递到Python解释器的参数,包括脚本名称。
      • sys.exit(int):大多数使用默认值0用来标识程序成功运行,也可以提供字符串信息用作错误信息。
      • sys.modules:映射模块名到载入模块的字典。
      • sys.path:字符串列表,是模块所在目录的目录名列表。
      • sys.platform:字符串,是解释器正在其上运行的“平台”名称。如操作系统(win32)或如Java虚拟机的其他种类平台。
      • sys.stdin, sys.stdout, sys.stderr:是类文件流对象,他们表示UNIX概念中的标准输入、标准输出和标准错误。
    • os module
      • os.environ:对环境变量进行映射>>>os.environ['PYTHONPATH']
      • os.system(command):在子shell中执行操作系统命令,用来运行外部程序。
      • os.sep:用于路径中的分隔符。UNIX中的标准分隔符是“/”,Windows中的是“\”。
      • os.pathsep:pathsep用于分割路径名。UNIX使用“:”,Windows 使用“;”。
      • os.linesep:用于文本文件的字符串分隔符。UNIX中为一个换行符 (\n), Mac OS 中为单个回车符 (\r), Windows 中则是两者的组合 (\r\n)。
      • os.urandom(n):使用一个依赖于系统的“真”随机数源,如果平台不支持,就会得到 NotImplementError
    • fileinput module
      • fileinput.(input([files[, inplace[, backup]]])) :用于遍历多个输入流的行。参数(inplace=True)进行原地处理。在原地处理时backup参数将文件名扩展备份到原始文件创建的备份文件中。
      • fileinput.filename():返回当前正在处理的文件名。
      • fileinput.lineno():返回当前累计的行数。所以在完成一个文件处理并开始处理下一个文件时,行数不会重置而是将上一个文件的最后行数加一作为计数的开始。
      • filename.filelineno():返回当前处理的文件的当前行数。每次在完成一个文件处理并开始处理下一个文件时,行数都会重置为1。
      • filename.isfirstline():在当前行数当前文件的第一行时返回真值,反之,返回假值。
      • filename.isstdin():在当前文件为sys.stdin时返回真值,否则返回假值。
      • filename.nextfile():关闭当前文件,跳到下一个文件,跳过的行不计。
      • filename.close():关闭当前文件链,结束迭代。
    • Set 集合:主要用于检查成员资格,因此副本是被忽略的。
      • & | ^:可对两个集合进行按位与、按位或和按位异或计算,分别得到两个集合的交集、并集和对称差集。
      • union(set):求两集合的并集。a.union(b)
      • issubset(set):判断是不是一个集合的子集。a.issubset(b)
      • isuperset(set):判断是不是一个集合的父序列。a.issuperset(b)
      • intersection(set):求两集合的交集。a.intersection(b)
      • difference(b):求集合a对集合b的差集。与直接进行减运算效果相同a.difference(b)
        a-b
      • symmetric_difference(set):求两集合的对称差集。
      • copy():复制一集合。
    • heap 堆
      • heappush(heap, x):将x入堆
      • heappop(heap):将堆中最小的元素弹出
      • heaify(heap):将heap属性强制应用到任意一个列表。使用任意列表作为参数,并且通过尽可能少的移位操作,将其转换成合法的堆。
      • heapreplace(heap, x):将堆中最小的元素弹出,同时将x入堆
      • nlargest(n, iter):返回iter中第n大的元素
      • nsmallest(n, iter):返回iter中第n小的元素
    • deque 双端队列
      • 支持append, appendleft, pop, popleft, rotate, extend, extendleft等操作。
    • time module
      • 日期元组:Python 日期元组的字段含义0-8分别对应年、月、日、时、分、秒、周、儒历日和夏令时。
      • time.asctime([tuple]):将当前时间转化为字符串。
      • time.localtime([secs]):将实数(从新纪元开始的秒数)转化为本地时间的元组。如果想要获得全球统一时间可以使用gmtime。
      • time.mktime(tuple):将日期元祖转换成从新纪元开始计算的秒数。
      • time.sleep(secs):休眠secs秒
      • time.strptime(string[, format]):将字符串转换为日期元祖。
      • time.time():使用自新纪元开始计算的秒数返回当前时间。
    • random module
      • random.random():返回 0<=n<1 的实数。
      • random.getrandbits(n):以长整型返回n个随机位(二进制数)
      • random.uniform(a, b):返回 a<=n

第十一章

  1. 打开文件:open(name[, mode[, buffering]])。open 函数使用一个文件名作为唯一的强制参数,然后返回一个对象文件。模式(mode)和缓冲(buffering)参数都是可选的。

    • r:读模式
    • w:写模式
    • a:追加模式
    • b:二进制模式(可添加到其他模式中使用)
    • +:读/写模式(可添加到其他模式中使用)
      在模式参数中使用U参数能够再打开文件时使用通用的换行符支持模式,在这种模式下,所有的换行符/字符串都被替换为\n,而不用考虑也运行的平台。

    缓冲(buffering):

    • 0(或者 False):I/O(输入/输出)就是无缓冲的,所有读写都是直接针对硬盘。
    • 1(或者 True):I/O 就是有缓冲的,使用内存来代替硬盘。
    • 大于1的数字:表示缓冲区的大小(字节)
    • -1(或者任何负数):表示默认的缓冲区大小
  2. 基本文件方法–读和写。首先解释一个术语:类文件——类文件对象是支持一些文件的方法和对象。如果有一个名为f的类文件对象,就可以使用f.write()和f.read(string)写入和读取对象。
    >>>f.open('somefile.txt', 'w') #默认为 r 模式
    >>>f.write('Hello, ')
    >>>f.write('World!')
    >>>f.close()
    >>>f.open('somefile.txt', 'r')
    >>>f.read(4)
    'Hell'
    >>>f.read() #通过不提供要读取字符数的方式会读取剩下所有的文件。
    o, World!

  3. 管式输出:在UNIX的shell中,使用管道(pipeline)可以在一个命令后面学些其他的多个命令,如
    $ cat somefile.txt | python somescript.py | sort

    • cat somefile.txt:只是把somefile.txt的内容写到标准输出(sys.stdout)
    • python somescript.py:这个命令运行了Python脚本somescript。结果应该是从标准输入读,把结果写到标准输出。
    • sort:这条命令从标准输入(sys.stdin)读取所有文本,按字母顺序,然后把结果写到标准输入。

    管道符号(|)将一个命令的标准输入和下一个标准输入连在一起。这样somescript.py会从sys.stdin中读取数据(cat somefile.txt写入的),并把结果写入它的sys.stdout(sort在此读入数据)。

  4. 随机访问:可以使用seektell来直接访问感兴趣的部分。

    • seek(offset[, whence]):把当前位置(进行读和写的位置)移动到由offset定义的位置。whence.offset是一个字节(字符)数,默认为0,即偏移量(非负)是从文件头开始计算的。
      >>>f.open(r'c:\text\somefile.txt', 'w')
      >>>f.write('0123456789')
      >>>f.seek(5)
      >>>f.write('Hello, World!')
      >>>f.close(r'c:\text\somefile.txt')
      >>>f.rean()
      01234Hello, World!56789
    • tell():返回当前文件的位置
      >>>f = open(r'c:\text\somefile.txt')
      >>>f.read(3)
      012
      f.read(2)
      34
      f.tell()
      5 #在这种情况下返回的是一个长整数,但不是所有情况都是这样的
  5. 读写行
    • file.readline():读取单独的一行(从当前位置开始知道一个换行符的出现,也读取这个换行符),不适用任何参数(这样读取并返回一行)或使用一个非负整数作为readline可以读取字符的最大值。
    • file.readlines():读取一个文件中的所有行并将其作为列表返回。
    • writelines:传给它一个字符串列表(任何序列或者可迭代对象),它会把所有字符串写入文件(或流)。不会增加新行,需要自己添加。
  6. 关闭文件:通常来说,一个文件对象在退出程序后(也可能在退出前)自动关闭。with语句可以打开文件并将其赋值到变量上。文件再语句结束后会自动关闭,即便是由于异常引起的。
    with open('somefile.txt') as somefile
    do_something(somefile)
    在写入了一些文件内容之后,通常是希望这些改变立刻体现在文件证,这样其他读取了这个文件的程序也能知道改变。如果数据被缓存了(在内存中临时地存储),知道关闭文件才会被写入到文件。如果需要继续使用文件(不关闭文件),又想将磁盘上的文件进行更新,就要调用问价对象的flush方法。不管在什么时候,能关闭文件的时候最好关闭文件。
  7. 上下文管理器(context manager):支持上下文管理协议的对象,这种对象实现了enter()exit()方法。
    • enter():不带任何参数,它在进入with语句块的时候,被调用,返回绑定值到as关键后的变量上。返回文件对象本身。
    • exit():带有三个参数:异常类型、异常对象和异常回溯。在离开方法时这个函数被调用。如果返回False,那么所有异常都不会被处理。会关闭文件。
  8. 对文件内容进行迭代:
    • 按字节处理
      f = open(filename)
      char = f.read(1)
      while char:
      process(char)
      char = f.read(1) #当到达文件末尾时,read()返回一个空的字符串
      f.close()
    • 按行操作
      f = open(filename)
      while True:
      line = f.readline()
      if not line: break
      process(line)
      f.close()
    • 读取所有内容:可以使用不带参数的read()一次读取整个文件,也可以使用readlines()把文件读入一个字符串列表,这样列表中每个字符串就是一行。
    • 使用fileinput实现懒惰行迭代:当文件非常大时,使用readlines会占用太多内存。可以使用for可以使用一个名为懒惰行迭代的方法,因为他只是读取实际需要的部分。
      import fileinput
      for line in fileinput(filename):
      process(line)
    • 文件迭代器:从 Python 2.2开始,文件对象就是可迭代的,即可在for循环中使用它们。
      f = open(filename)
      for line in f:
      process(line)
      f.close()
      对文件进行迭代而不使用变量存储文件对象,不需要显式地关闭文件
      for line in open(filename):
      process(line)
      标准输入是可迭代的for line in sys.stdin

你可能感兴趣的:(Python基础教程读书笔记)