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
發佈了38 篇原創文章 · 獲贊 11 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章