Python第六周 學習筆記(1)

來源:互聯網
上載者:User

標籤:學習筆記

檔案操作開啟操作
  • io.open(file, mode=‘r‘, buffering=-1, encoding=None,errors=None, newline=None, closefd=True, opener=None)
  • 返回一個檔案對象(流對象)和檔案描述符。開啟檔案失敗,則返回異常

  • 基本使用:
    f = open("test")print(f.read())f.close()
  • 使用完一定要關閉

  • 檔案訪問模式分兩種:
    文字模式和二進位模式
open的參數file
  • 開啟或者要建立的檔案名稱。如果不指定路徑,預設是當前路徑
mode模式
參數 描述
r 預設的,表示唯讀開啟,如果調用write,會拋異常。如果檔案不存在,拋出FileNotFoundError異常
w 唯寫開啟,如果檔案不存在,則直接建立檔案,如果檔案存在,則清空檔案內容
x 建立並寫入一個新檔案,如果檔案存在,拋出FileExistsError異常
a 寫入開啟,如果檔案存在,則追加
b 二進位模式,與字元編碼無關,位元組操作使用bytes類型
t 預設的,文字模式,將檔案的位元組按照某種字元編碼理解,按照字元操作
+ 讀寫開啟一個檔案。給原來唯讀、唯寫方式開啟提供缺失的讀或者寫能力,不能單獨使用。擷取檔案對象依舊按照r、w、a、x的特徵

r唯讀,wxa唯寫
wxa都可以產生新檔案

檔案指標
  • 指向當前位元組位置
    • mode=r 指標起始為0
    • mode=a 指標起始在EOF
tell()
  • 顯示指標當前位置
seek(offset[, whence])
  • 移動指標位置,offset 移動位元組數,
  • whence 文字模式與二進位模式下操作的表現形式可能有不同
  • 文字模式下

    • whence 0 預設值,表示從頭開始,offset只能正整數
    • whence 1 表示從當前位置,offset只接受0
    • whence 3 表示從EOF開始,offset只接受0
  • 二進位模式下
    • whence 0 預設值,表示從頭開始,offset只能正整數
    • whence 1 表示從當前位置,offset可正可負
    • whence 2 表示從EOF開始,offset可正可負

      二進位模式支援任意起點的位移,從頭、從尾、從中間位置開始。
      向後seek可以超界,但是向前seek的時候,不能超界,否則拋異常

buffering:緩衝區
  • -1表示預設buffer大小
  • 二進位模式: 使用io.DEFAULT_BUFFER_SIZE值控制
  • 文字模式: 如果是終端裝置,使用行緩衝,否則與二進位模式相同
  • 0 只在二進位模式使用,表示關buffer
  • 1 只在文字模式使用,表示行緩衝 (見到分行符號就flush)
  • 大於1 指定buffer大小
buffer緩衝區
  • 一個記憶體空間,FIFO隊列,緩衝區滿或者達到閾值,就會flush到磁碟
  • flush()

    • 將緩衝區資料寫入磁碟
    • 調用close()時會先調用flush()
  • encoding:

    • 僅文字模式使用
    • 預設值None使用預設編碼(windows GBK,Linux UTF8)
  • errors

    • None和strict 有錯誤將拋異常,ignore 忽略
  • newline

    • 預設None ‘\n‘, ‘\r‘, ‘\r\n‘皆視為換行(都被轉換為/n)
    • “表示不會自動轉換通用分行符號
    • 其他合法字元表示指定字元為分行符號
  • closefd
    • 關閉檔案描述符,True 關閉,False 檔案關閉後保持描述符
read
  • read(size=-1)
    • size 讀取多少個字元或位元組 負數或None 讀取到EOF
行讀取
  • readline(size=-1)

    • 每次讀取一行,size 控制每次讀取一行的幾個字元或位元組
  • readlines(hint=-1)
    • 讀取所有行的列表
write
  • write(s) 返回寫入字元個數
  • writelines(lines) 寫入字串列表
其他
  • seekable()
  • readable()
  • writable()
  • closed
上下文管理
  • 由解譯器釋放對象

  • 文法:with ... as
    • 上下文管理的語句塊不會開啟新的範圍
    • 語句塊執行完自動關閉檔案對象
記憶體IOStringIO
from io import StringIO
  • 記憶體中開闢一個文字模式的buffer,可以像檔案對象一樣操作
  • 當調用close後,buffer會被釋放

  • 方法與檔案IO類似
  • getvalue()

    • 擷取全部內容
  • 優點
    • 減少資料落地,提高運行效率
BytesIO
from io import BytesIO
  • 與StringIO類似
file-like對象
  • 類檔案對象:
    • socket、stdin、stdout都是類檔案對象
路徑操作
  • 建議使用pathlib模組,使用Path對象來操作
    from pathlib import Path
路徑拼接與分解操作符 /
  • 操作符重載
  • Path對象 / Path對象
  • Path對象 / 字串 或 字串 / Path對象
parts
  • 將路徑分解,返回一個元組
    from pathlib import Pathp3 = Path.cwd()p3.parts

output: (‘/‘, ‘data‘, ‘MyPythonObject‘)

joinpath
  • 串連多個字元到Path對象中
擷取路徑
  • str 擷取路徑字串
  • bytes 擷取路徑位元組
父目錄
  • parent 返回父目錄Path類對象
  • parents 返回父目錄可迭代對象,索引0是當前直接的父目錄
其他
  • name 目錄的最後一個部分
  • suffix 目錄中最後一個部分的副檔名
  • stem 目錄最後一個部分,沒有尾碼
  • suffixes 返回多個副檔名列表
  • with_suffix(suffix) 補充副檔名到路徑尾部,返回新的路徑,副檔名存在則無效
  • with_name(name) 替換目錄最後一個部分並返回一個新的路徑

  • cwd() 返回當前工作目錄
  • home() 返回當前家目錄

  • is_dir() 是否目錄
  • is_file() 是否普通檔案
  • is_symlink() 是否軟連結
  • is_socket() 是否socket檔案
  • is_block_device() 是否塊裝置
  • is_char_device() 是否字元裝置
  • is_absolute() 是否絕對路徑

  • resolve() 返回當前Path對象的絕對路徑,如果是軟連結則直接被解析
  • absolute() 返回絕對路徑,建議使用resolve

  • exists() 目錄或檔案是否存在
  • rmdir() 刪除空目錄。沒有提供判斷目錄為空白的方法
  • touch(mode=0o666,exist_ok=True) 建立一個檔案
  • as_uri() 將路徑返回成URI,例如"file:///etc/passwd"

  • mkdir(mode=0o777,parents=False,exist_ok=False)

    • parents 是否建立父目錄,True等同於mkdir -p False時,父目錄不存在,則拋FileNotFoundError
    • exist_ok False時,路徑存在,拋出FileExistsError True時,忽略此異常
  • iterdir() 迭代目前的目錄

  • glob() 通配給定的模式

  • rglob() 通配給定的模式,遞迴目錄 返回一個產生器

  • match() 模式比對,成功返回True

  • stat() 查看檔案屬性

  • lstat() 同stat 但如果時連結檔案,則顯示本身的檔案資訊
檔案操作
  • open(mdoe=‘r‘,buffering=-1,encoding=None,errors=None,newline=None)

    • 類似內建函數open 返回一個檔案對象
  • read_bytes()

    • 以‘rb’讀取
  • read_text(encoding=None,errors=None)

    • 以“rt‘讀取
  • Path.write_bytes(data)

    • 以wb寫入
  • write_text(data,encoding=None,errors=None)
    • 以‘wt‘寫入
os模組
  • os.name

    • windows是nt,Linux是posix
  • os.uname()

    • 返回系統資訊 僅linux
  • sys.platform

    • windos顯示win32 linux顯示linux
  • os.listdir(‘0:/temp‘)

    • 返回目錄內容列表
  • os.stat(path, *, dir_fd=None, follow_symlinks=True)

    • 本質上調用Linux的stat
    • path:路徑的string或bytes,或fd檔案描述符
    • follow_symlinks True返迴文件本身資訊,False 如果時軟鏈串連則顯示軟連結本身
  • os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)

    • 參考Linux chmod命令
  • os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)
  • 參考Linux chown命令
shutil模組
  • copyfileobj(fsrc, fdst[, length])

    • 複製內容
  • copyfile(src, dst, *, follow_symlinks=True)

    • 複製內容
  • copymode(src, dst, *, follow_symlinks=True)

    • 複製許可權
  • copystat(src, dst, *, follow_symlinks=True)

    • 複製中繼資料,包括許可權
  • copy(src, dst, *, follow_symlinks=True)

    • 複製內容、許可權
  • copy2(src, dst, *, follow_symlinks=True)

    • 複製內容、中繼資料
  • copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)

    • 遞迴複製目錄 預設使用copy2
  • rmtree(path, ignore_errors=False, onerror=None)

    • 遞迴刪除 慎用
  • move(src, dst, copy_function=copy2)
    • 遞迴移動檔案、目錄
csv檔案
  • Comma-Separated Values
  • 被行分隔字元、資料行分隔符號劃分成行與列
  • csv不指定字元編碼

  • 行分隔字元為\r\n
  • 資料行分隔符號常為逗號或定位字元

如果欄位中含有雙引號、逗號、分行符號,必須使用雙引號括起來。
如果欄位本身包含雙引號,使用兩個雙引號表示一個轉義

csv模組
  • reader(csvfile, dialect=‘excel‘, **fmtparams)

    • 返回DictReader對象,是一個行迭代器
  • fmtparams可設定

    • delimiter 資料行分隔符號,預設逗號
    • lineterninator 行分隔字元 預設/r/n
    • quotechar 欄位引用符號,預設雙引號

    • doublequote 雙引號處理 預設True ,quochar顯示兩個,False 使用eacapechar作為quotechar的首碼
    • escapechar 逸出字元,預設None
    • quoting 指定雙引號規則。QUOTE_ALL所有欄位 QUOTE_MINIMAL特殊字元欄位 QUOTE_NONNUMNERIC非數字欄位 QUOTE_NONE 不適用引號
  • writer(csvfile, dialect=‘excel‘, **fmtparams)
    • 返回DictWriter執行個體
    • DictWriter的主要方法有writerow、writerows
ini檔案
  • ini檔案格式形如:
[DEFAULT]a = test[mysql]default-character-set=utf8a = 1000[mysqld]datadir =/dbserver/dataport = 33060character-set-server=utf8sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 中括弧的內容稱為section
  • 每個section中,都是key,value形式的索引值對,key稱為option

預設section DEFAULT必須大寫

configparser模組ConfigParserle類
from configparser import ConfigParsercfg = ConfigParser()
  • 可將section當作key,其對應的值是儲存著option的索引值對字典,即ini檔案是一個嵌套字典。預設使用有序字典

  • read(filenames, encoding=None)

    • 讀取檔案,filenames可單獨檔案或檔案清單
  • sections()

    • 返回section列表。不包括預設section
  • add_section(section_name)

    • 增加section
  • has_section(section_name)

    • 是否存在一個section
  • options(section)

    • 返回一個section的options,包括預設section的options
  • has_option(section)

    • 是否存在一個section的option
  • get(section, option, *, raw=False, vars=None[, fallback])

    • 從指定的section的option取值,如未找到,去DEFAULT找
  • getint(section, option, *, raw=False, vars=None[, fallback])
  • getfloat(section, option, *, raw=False, vars=None[, fallback])
  • getboolean(section, option, *, raw=False, vars=None[, fallback])

    • 返回指定類型資料
  • items(raw=False, vars=None)

    • 返回所有section名與其對象
  • items(section, raw=False, vars=None)

    • 返回指定section的option的索引值對二元組
  • set(section, option, value)

    • 設定指定section的option=value(option,value必須為字串 ),section不存在則拋異常
  • remove_section(section)

    • 移除section及其option
  • remove_option(section, option)

    • 移除指定section下的指定option
  • write(fileobject, space_around_delimiters=True)
    • 將當前config的所有內容寫入fileobject中
序列化與還原序列化定義
  • serialization 序列化

    • 將記憶體中Object Storage Service下來,把它變成一個個位元組 -> 二進位
  • deserialization 還原序列化

    • 將檔案的一個個位元組恢複成記憶體中對象 <- 二進位
  • 序列化儲存到檔案就是持久化
  • 一般將資料序列化後持久化或進行網路傳輸或是從檔案、接受自網路的位元組序列還原序列化
pickle庫
  • dump(obj, protocol=None, *, fix_imports=True)

    • 將對象序列化為bytes對象
  • dump(obj, file, protocol=None, *, fix_imports=True)

    • 將對象序列化到檔案對象,即存入檔案
  • loads(file, *, fix_imports=True, encoding="ASCII", errors="strict")

    • 從bytes對象還原序列化
  • load(bytes_object, *, fix_imports=True, encoding="ASCII", errors="strict")
    • 從檔案讀取資料還原序列化
序列化、還原序列化實驗序列化應用
  • 一般使用在網路傳輸中,將資料序列化後通過網路傳輸到遠程節點,遠程伺服器上的服務將接收到的資料還原序列化使用
  • 注意:遠程接收端還原序列化時必須有對應的資料類型,否則會報錯。尤其自訂類,必須遠程端有一致的定義
  • 大多數項目都不是單機、單服務的。需要通過網路將資料傳送到其他節點,因此需要大量的序列化與還原序列化
  • 但是如果跨平台、跨語言、跨協議之間通常使用XML、Json、Protocol Buffer等。不選擇pickle
Json模組
  • JavaScript Object Notation

  • Json資料類型

  • 字串

  • 數值

  • 對象

    • 無序索引值對集合
    • key必須是字串,用雙引號包圍
    • value可任意合法值
  • 數組
    • 有序的值的集合
常用方法
import json
  • dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

    • json編碼
  • dump(obj, fp, *, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, sort_keys=False, **kw)

    • json編碼並存入檔案
  • loads(s, *, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)

    • json解碼
  • load(fp, *, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
    • json解碼,從檔案讀取資料
MessagePack模組
  • 與json類似,但同樣資料所佔空間要小於Json
安裝
  • $ pip install msgpack-python
常用方法
import msgpack
  • packb(o, **kwargs) <=> dumps

    • 序列化對象。提供了dumps來相容pickle和json
  • unpackb(packed, object_hook=None, list_hook=None, bool use_list=1, encoding=None, unicode_errors=‘strict‘, object_pairs_hook=None, ext_hook=ExtType, Py_ssize_t max_str_len=2147483647, Py_ssize_t max_bin_len=2147483647, Py_ssize_t max_array_len=2147483647, Py_ssize_t max_map_len=2147483647, Py_ssize_t max_ext_len=2147483647) <==> loads

    • 還原序列化對象。提供了loads來相容
  • pack(o, stream, **kwargs) <==> dump

    • 序列化對象儲存到檔案對象。提供了dump來相容
  • unpack(stream, object_hook=None, list_hook=None, bool use_list=1, encoding=None, unicode_errors=‘strict‘, object_pairs_hook=None, ext_hook=ExtType, Py_ssize_t max_str_len=2147483647, Py_ssize_t max_bin_len=2147483647, Py_ssize_t max_array_len=2147483647, Py_ssize_t max_map_len=2147483647, Py_ssize_t max_ext_len=2147483647) <==> load
    • 還原序列化對像儲存到檔案對象。提供了load來相容

Python第六周 學習筆記(1)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.