?gzip --- 對 gzip 格式的支持?

源代碼:?Lib/gzip.py


此模塊提供的簡單接口幫助用戶壓縮和解壓縮文件,功能類似于 GNU 應用程序?gzip?和?gunzip

數據壓縮由?zlib?模塊提供。

gzip?模塊提供?GzipFile?類和?open()、compress()、decompress()?幾個便利的函數。GzipFile?類可以讀寫?gzip?格式的文件,還能自動壓縮和解壓縮數據,這讓操作壓縮文件如同操作普通的?file object?一樣方便。

注意,此模塊不支持部分可以被?gzip?和?gunzip?解壓的格式,如利用?compress?或?pack?壓縮所得的文件。

這個模塊定義了以下內容:

gzip.open(filename,?mode='rb',?compresslevel=9,?encoding=None,?errors=None,?newline=None)

以二進制方式或者文本方式打開一個 gzip 格式的壓縮文件,返回一個?file object。

filename?參數可以是一個實際的文件名(一個?str?對象或者?bytes?對象),或者是一個用來讀寫的已存在的文件對象。

mode?參數可以是二進制模式:?'r',?'rb',?'a',?'ab',?'w',?'wb',?'x'?or?'xb'?, 或者是文本模式?'rt',?'at',?'wt', or?'xt'。默認值是?'rb'

The?compresslevel?argument is an integer from 0 to 9, as for the?GzipFile?constructor.

對于二進制模式,這個函數等價于?GzipFile?構造器:GzipFile(filename,?mode,?compresslevel)。在這個例子中,encoding,?errors?和?newline?三個參數一定不要設置。

對于文本模式,將會創建一個?GzipFile?對象,并將它封裝到一個?io.TextIOWrapper?實例中, 這個實例默認了指定編碼,錯誤抓獲行為和行。

在 3.3 版更改:?支持?filename?為一個文件對象,支持文本模式和?encoding,?errors?和?newline?參數。

在 3.4 版更改:?支持?'x',?'xb'?和?'xt'?三種模式。

在 3.6 版更改:?接受一個?path-like object。

exception?gzip.BadGzipFile

針對無效 gzip 文件引發的異常。 它繼承自?OSError。 針對無效 gzip 文件也可能引發?EOFError?和?zlib.error。

3.8 新版功能.

class?gzip.GzipFile(filename=None,?mode=None,?compresslevel=9,?fileobj=None,?mtime=None)

GzipFile?類的構造器,它模擬了?file object?的大部分方法,但?truncate()?方法除外。?fileobj?和?filename?中至少有一個必須為非空值。

新的實例基于?fileobj,它可以是一個普通文件,一個?io.BytesIO?對象,或者任何一個與文件相似的對象。當?filename?是一個文件對象時,它的默認值是?None

當?fileobj?為?None?時,?filename?參數只用于?gzip?文件頭中,這個文件有可能包含未壓縮文件的源文件名。如果文件可以被識別,默認?fileobj?的文件名;否則默認為空字符串,在這種情況下文件頭將不包含源文件名。

mode?參數可以是?'r',?'rb',?'a',?'ab',?'w',?'wb',?'x'?或?'xb'?中的一個,具體取決于文件將被讀取還是被寫入。 如果可識別則默認為?fileobj?的模式;否則默認為?'rb'。 在未來的 Python 發布版中將不再使用?fileobj?的模式。 最好總是指定?mode?為寫入模式。

需要注意的是,文件默認使用二進制模式打開。 如果要以文本模式打開一個壓縮文件,請使用?open()?方法 (或者使用?io.TextIOWrapper?包裝?GzipFile)。

compresslevel?參數是一個從?0?到?9?的整數,用于控制壓縮等級;1?最快但壓縮比例最小,9?最慢但壓縮比例最大。?0?不壓縮。默認為?9

mtime?參數是一個可選的數字時間戳用于寫入流的最后修改字段,。mtime?只在壓縮模式中使用。如果省略或者值為?None,則使用當前時間。更多細節,詳見?mtime?屬性。

調用?GzipFile?對象的?close()?方法不會關閉?fileobj,因為你可能希望增加其它內容到已經縮的數據中。 你還可以傳入一個?io.BytesIO?對象作為?fileobj?打開,并使用?io.BytesIO?對象的?getvalue()?方法提取所得到的內存緩沖區數據。

GzipFile?支持?io.BufferedIOBase?接口,包括迭代和?with?語句。 只有?truncate()?方法未被實現。

GzipFile?還提供了以下的方法和屬性:

peek(n)

在不移動文件指針的情況下讀取?n?個未壓縮字節。最多只有一個單獨的讀取流來服務這個方法調用。返回的字節數不一定剛好等于要求的數量。

備注

調用?peek()?并沒有改變?GzipFile?的文件指針,它可能改變潛在文件對象(例如:?GzipFile?使用?fileobj?參數進行初始化)。

3.2 新版功能.

mtime

在解壓的過程中,最后修改時間字段的值可能來自于這個屬性,以整數的形式出現。在讀取任何文件頭信息前,初始值為?None

所有?gzip?東方壓縮流中必須包含時間戳這個字段。以便于像?gunzip這樣的程序可以使用時間戳。格式與?time.time()?的返回值和?os.stat()?對象的?st_mtime?屬性值一樣。

name

指向磁盤上 gzip 文件的路徑,為?str?或?bytes?對象。 等價于原始輸入路徑上?os.fspath()?的輸出,不帶其他標準化、解析或擴展。

在 3.1 版更改:?支持?with?語句,構造器參數?mtime?和?mtime?屬性。

在 3.2 版更改:?添加了對零填充和不可搜索文件的支持。

在 3.3 版更改:?實現?io.BufferedIOBase.read1()?方法。

在 3.4 版更改:?支持?'x'?and?'xb'?兩種模式。

在 3.5 版更改:?支持寫入任意?bytes-like objects。read()?方法可以接受?None?為參數。

在 3.6 版更改:?接受一個?path-like object。

在 3.12 版更改:?移除?filename?屬性,改用?name?屬性。

3.9 版后已移除:?打開?GzipFile?用于寫入而不指定?mode?參數的做法已被棄用。

gzip.compress(data,?compresslevel=9,?*,?mtime=None)

壓縮?data,返回一個包含已壓縮數據的?bytes?對象。?compresslevel?和?mtime?與上述?GzipFile?構造器的對應參數含義相同。 當?mtime?設為?0?時,此函數將等價于?zlib.compress()?的?wbits?設為?31。 zlib 函數速度更快一些。

3.2 新版功能.

在 3.8 版更改:?添加了?mtime?形參用于可重復的輸出。

在 3.11 版更改:?通過一次性壓縮全部數據而不是通過流方式提高了速度。 將?mtime?設為?0?的調用將被委托給?zlib.compress()?以提高速度。

gzip.decompress(data)

解壓縮?data,返回一個包含已解壓數據的?bytes?對象。 此函數可以解壓縮多成員的 gzip 數據(即多個 gzip 塊拼接在一起)。 當數據確定只包含一個成員時則?wbits?設為 31 的?zlib.decompress()?函數更快一些。

3.2 新版功能.

在 3.11 版更改:?通過一次性解壓縮全部數據而不是通過流方式提高了速度。

用法示例

讀取壓縮文件示例:

import gzip
with gzip.open('/home/joe/file.txt.gz', 'rb') as f:file_content = f.read()

創建GZIP 文件示例:

import gzip
content = b"Lots of content here"
with gzip.open('/home/joe/file.txt.gz', 'wb') as f:f.write(content)

使用 GZIP 壓縮已有的文件示例:

import gzip
import shutil
with open('/home/joe/file.txt', 'rb') as f_in:with gzip.open('/home/joe/file.txt.gz', 'wb') as f_out:shutil.copyfileobj(f_in, f_out)

使用 GZIP 壓縮二進制字符串示例:

import gzip
s_in = b"Lots of content here"
s_out = gzip.compress(s_in)

參見

模塊?zlib

支持?gzip?格式所需要的基本壓縮模塊。

命令行界面

gzip?模塊提供了簡單的命令行界面用于壓縮和解壓縮文件。

在執行后?gzip?模塊會保留輸入文件。

在 3.8 版更改:?添加一個帶有用法說明的新命令行界面命令。 默認情況下,當你要執行 CLI 時,默認壓縮等級為 6。

命令行選項

file

如果未指定?file,則從?sys.stdin?讀取。

--fast

指明最快速的壓縮方法(較低壓縮率)。

--best

指明最慢速的壓縮方法(最高壓縮率)。

-d,?--decompress

解壓縮給定的文件。

-h,?--help

顯示幫助消息。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/215531.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/215531.shtml
英文地址,請注明出處:http://en.pswp.cn/news/215531.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Codeforces Round 911 (Div. 2)

Codeforces Round 911 (Div. 2) A 有大于3的區間就可以無限取水&#xff0c;答案為2&#xff0c;其他的按照個數 #include <bits/stdc.h>using namespace std;void solve() {int n, k 0;cin >> n;string s, t "...";cin >> s;auto it search…

ARM day6

2.串口發送指令控制硬件工作 結果&#xff1a; uart.h #ifndef __UART_H__ #define __UART_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" #include "stm32mp1xx_uart.h"void myuart4_init(); void myputchar(char i); cha…

element-ui基本使用

基本使用&#xff1a;npm i element-uimain.js&#xff1a;/*** 該文件是整個項目的入口文件*/ import Vue from vue; import App from ./App.vue; import ElementUI from element-ui; // 引入Element全部樣式 import element-ui/lib/theme-chalk/index.css;// 關閉vue的生產提…

C++ this指針

通常情況下&#xff0c;類的成員函數都只涉及一個對象&#xff0c;即調用它的對象。但有時候方法可能涉及到兩個對象&#xff0c;在這種情況就需要使用到C的this指針。 class Stock { private: ... double total_val; ... public: double total() const {return total_val;} }…

【Linux】進程周邊002之進程狀態

&#x1f440;樊梓慕&#xff1a;個人主頁 &#x1f3a5;個人專欄&#xff1a;《C語言》《數據結構》《藍橋杯試題》《LeetCode刷題筆記》《實訓項目》《C》《Linux》 &#x1f31d;每一個不曾起舞的日子&#xff0c;都是對生命的辜負 目錄 前言 1.什么是狀態&#xff1f; …

ChatGLM 手記

ChatGLM-6B&#xff1a;GitHub - THUDM/ChatGLM-6B: ChatGLM-6B: An Open Bilingual Dialogue Language Model | 開源雙語對話語言模型 ChatGLM3&#xff1a; GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 開源雙語對話語言模型 chatglm.cpp&…

利用開源工具Chartmuseum,搭建私有helm chart倉庫

1、ChartMuseum是什么? ChartMuseum 是一個用 Go 語言寫的開源的 Helm Chart Repository 服務器,有多種 API 來完成對 Helm Chart Repository、Chart 以及 Server 的操作。所有可用的 API 以及使用方法可查看GitHub Repo。 2、ChartMuseum的安裝 ChartMuseum安裝可參考官網…

Python中的魔力編程:掌握面向對象之道

Python中的面向對象編程 背景&#xff1a; ? 最近在看一些代碼的時候&#xff0c;對類中的一些內置方法不是很懂&#xff0c;因此出一篇文章來細說一下&#xff0c;希望大家看完后對Python中類有一個清楚的認識。 基礎鋪墊&#xff1a; ? 面向對象的三個特點&#xff1a;…

C語言中的成員訪問:普通變量與指針變量的區別與使用

C語言中的成員訪問 在C語言中&#xff0c;我們可以通過變量來訪問它們的成員。根據變量的類型&#xff0c;我們使用不同的成員訪問符&#xff1a;.和->。本文將詳細介紹這兩個成員訪問符的使用。 目錄 普通變量的成員訪問指針變量的成員訪問示例代碼總結 普通變量的成員…

深入探索 Spring Boot:簡化開發,加速部署的全方位利器

目錄 導言 1. 自動配置&#xff08;Auto-Configuration&#xff09; 2. 起步依賴&#xff08;Starter Dependencies&#xff09; 3. 嵌入式 Web 服務器 4. Actuator 5. 外部化配置 6. 簡化的安全性配置 7. Spring Boot CLI 8. Spring Boot DevTools 導言 在當今軟件開…

java基礎之抽象的概念(全網最詳細)

一.抽象的概念 如下圖所示&#xff1a; 如上圖所示&#xff0c;一個父類為圖形&#xff0c;計算圖形的面積方法&#xff0c;那么就會有疑問&#xff0c;計算哪個圖形的面積呢&#xff1f;所以這個計算圖形的面積方法就稱為抽象方法&#xff1b; 二.抽象方法和抽象類的格式 …

3、Kafka 線上集群部署方案怎么做?

文章目錄 1、操作系統的選擇1.1、I/O 模型的使用1.2、數據網絡傳輸效率1.3、社區支持度 2、磁盤的選擇3、磁盤容量的規劃3.1、舉例思考本問題&#xff1a;3.2、計算一下&#xff1a;3.3、規劃磁盤容量時你需要考慮下面這幾個元素&#xff1a; 4、帶寬規劃4.1、計算 總結 1、操作…

電商淘寶爬蟲API與淘寶官方開放平臺API的區別以及如何選擇適合自己的API接口

隨著數字化時代的到來&#xff0c;數據已經成為企業競爭力的重要因素。為了獲取數據&#xff0c;企業或個人常常需要使用API接口。常見的API接口包括爬蟲API和官方開放平臺API。本文將詳細介紹這兩種API接口的區別以及如何選擇適合自己的API接口。 一、爬蟲API與官方開放平臺A…

如何使用GaussDB創建外表(FOREIGN TABLE)

目錄 一、前言 二、創建外表的特點 二、GaussDB創建外表訪問外部數據庫表&#xff08;示例&#xff09; 1、創建外表 2、FAQ&#xff1a;CREATE USER MAPPING錯誤 三、GaussDB創建外表映射數據文件&#xff08;示例&#xff09; 1、創建數據文件 2、創建外表 3、FAQ&a…

Java之時間類2(JDK8新增)

一、Date類 &#xff08;一&#xff09;、ZoneId&#xff1a;時區 1、概述 ZoneId是Java 8中處理時區的類。它用于表示時區標識符&#xff0c;例如“America/New_York”或“Asia/Tokyo”。一共有600個時區。 2、常用方法: static Set<String> getAvailableZoneIds()獲…

C++基礎知識

目錄 前言&#xff1a; 命名空間 命名空間的定義 命名空間的使用 c輸入與輸出 缺省參數 函數重載 引用 引用的特性 常引用 引用的使用場景 引用做參數 引用做返回值 引用與指針的區別 內聯函數 內聯函數的特性 前言&#xff1a; C 語言是結構化和模塊化的語言&…

VS CODE 出錯 XHR failed

重新下載過去的版本&#xff0c;可能由于最近版本更新導致 Visual Studio Code September 2023

談談MYSQL主從復制原理

目錄 概述 要點binlog日志 主從復制過程 總結 概述 MySQL 主從復制是指數據可以從一個MySQL數據庫服務器主節點復制到一個或多個從節點。 MySQL 默認采用異步復制方式。從節點不用一直訪問主服務器來更新自己的數據&#xff0c;數據的更新可以在遠程連接上進行&#xff0…

Volatility3內存取證工具安裝及入門在Linux下的安裝教程

1-1. Volatility3簡介 Volatility 是一個完全開源的工具&#xff0c;用于從內存 (RAM) 樣本中提取數字工件。支持Windows&#xff0c;Linux&#xff0c;MaC&#xff0c;Android等多類型操作系統系統的內存取證。 針對競賽這塊&#xff08;CTF、技能大賽等&#xff09;基本上都…

websocket vue操作

let websocket: WebSocket; /** websocket測試 */ function connectWebsocket() {if (typeof WebSocket "undefined") {console.log("您的瀏覽器不支持WebSocket");return;}// let ip window.location.hostname ":8080";let ip "10.192…