當前位置:首頁 » 編程語言 » python解析yaml

python解析yaml

發布時間: 2024-02-08 21:30:43

1. python中四種配置文件

常用的配置文件後綴是.ini、.conf、.py,當然還有使用.json、.txt的,推薦使用常用的.ini、.py,配置文件的名字一般是config便於理解和使用。

ini配置文件,這類配置文件我們使用內置configparser庫來使用,它可以實現配置文件的寫入、更新、刪除、讀取等操作非常方便,建議使用這種方式。
新建一個config.ini的配置文件內容如下,編碼格式要是 utf-8 以免出錯。:

其中[]中的是section節點,該節點下的等式是option即鍵=值
然後每一行寫一個option ,每個選項就是一個option。直接寫名字,後面加 " = " 再加上它的值就行,字元串的表示不要加引號,否則引號也會被解析出來。
可以在配置文件中加入注釋 ,但是注釋必須是單獨的一行,且以 「#」 開頭。只是每次運行時不會讀入注釋,只要運行一次,寫入文件後,所有的注釋都會消失。

config.json文件

使用python內置的 json 標准庫進行解析ini文件。
load() 從json文件中讀取json格式數據
loads() 將字元串類型數據轉化為json格式數據
mp() 將json格式數據保存到文件
mps() 將json格式數據保存為字元串類型

TOML的語法廣泛地由key = "value"、[節名]、#注釋構成。
支持以下數據類型:字元串、整形、浮點型、布爾型、日期時間、數組和圖表。
config.toml文件

使用外部庫 toml 解析toml文件。

安裝:pip install toml
讀取文件

安裝:

YAML是目前最推薦的配置文件格式。優秀的配置文件標准它幾乎都有:

容易閱讀和修改,支持注釋。

支持豐富的數據類型。

不同格式的明確表達。

yaml使用時需要注意:

yaml強制縮進。雖然不規定具體縮進幾個空格,但是同一級的內容要保持相同的縮進。

冒號後面一定要加空格, 否則無法解析。

python解析 yaml 可以使用pyyaml庫,操作和標準的文件操作非常類似:

得到的data就是解析後的數據,在python當中,它是一個嵌套的字典:

想獲取某一項配置,再通過字典的操作獲取:
config.yaml文件

讀取

2. Python 自動化處理 Yaml 文件-



Yaml文件內容—示例1:

Yaml文件內容—示例2:

從上述示例文件內容可以看到 Yaml 數據結構:

1). 對象:鍵值對的集合(簡稱 "映射或字典")

例如:family 和 address 這兩個對象後面分別有對應的鍵值對集合。

2). 鍵值對用冒號 「:」 結構表示,冒號與值之間需用空格分隔

例如:

family 對象中的 key 為 name 與其對應的 value 值 Smile_Family 之間是使用空格分隔的。

address 對象中的 key 為 province 與其對應的 value 值 BeiJing 之間是使用空格分隔的。

3). 數組:一組按序排列的值(簡稱 "序列或列表"),數組前加有 「-」 符號,符號與值之間需用空格分隔

例如:

parents 中的 John 和 Jane

children 中的 Lily 和 Frank

4). 純量(scalars):單個的、不可再分的值。例如:字元串、bool值、整數、浮點數、時間、日期、null等

None值可用null也可用 ~ 表示;


yaml文件內容如下:

Python解析輸出為:

這個例子輸出一個字典,其中value包括所有基本類型

Yaml文件內容如下:

Python解析輸出為:悄局

Yaml文件內容如下:

Python輸出為:

如果字元串沒有空格或特殊字元,不需要加引號,但如果其中有空格或啟則讓特殊字元,則需要加引號。

這里要注意單引號和雙引號的區別:

單引號中的特殊字元轉到 Python 會被轉義,也就是到最後是原樣輸出;

雙引號不會被 Python 轉義,到最後是輸出了特殊字元盯搭;

Yaml文件內容如下:

Python輸出:


3. python常用函數包有哪些

一些python常用函數包:

1、Urllib3

Urllib3是一個 Python 的 HTTP 客戶端,它擁有 Python 標准庫中缺少的許多功能:

  • 線程安全

  • 連接池

  • 客戶端 SSL/TLS 驗證

  • 使用分段編碼上傳文件

  • 用來重試請求和處理 HTTP 重定向的助手

  • 支持 gzip 和 deflate 編碼

  • HTTP 和 SOCKS 的代理支持

2、Six

six 是一個是 Python 2 和 3 的兼容性庫。這個項目旨在支持可同時運行在 Python 2 和 3 上的代碼庫。它提供了許多可簡化 Python 2 和 3 之間語法差異的函數。

3、botocore、boto3、s3transfer、awscli

Botocore是 AWS 的底層介面。Botocore是 Boto3 庫(#22)的基礎,後者讓你可以使用 Amazon S3 和 Amazon EC2 一類的服務。Botocore 還是 AWS-CLI 的基礎,後者為 AWS 提供統一的命令行界面。

S3transfer(#7)是用於管理 Amazon S3 傳輸的 Python 庫。它正在積極開發中,其介紹頁面不推薦人們現在使用,或者至少等版本固定下來再用,因為其 API 可能發生變化,在次要版本之間都可能更改。Boto3、AWS-CLI和其他許多項目都依賴s3transfer。

4、Pip

pip是「Pip Installs Packages」的首字母遞歸縮寫。

pip很容易使用。要安裝一個包只需pip install <package name>即可,而刪除包只需pip uninstall <package name>即可。

最大優點之一是它可以獲取包列表,通常以requirements.txt文件的形式獲取。該文件能選擇包含所需版本的詳細規范。大多數 Python 項目都包含這樣的文件。

如果結合使用pip與virtualenv(列表中的 #57),就可以創建可預測的隔離環境,同時不會干擾底層系統,反之亦然。

5、Python-dateutil

python-dateutil模塊提供了對標准datetime模塊的強大擴展。我的經驗是,常規的Python datetime缺少哪些功能,python-dateutil就能補足那一塊。

6、Requests

Requests建立在我們的 #1 庫——urllib3基礎上。它讓 Web 請求變得非常簡單。相比urllib3來說,很多人更喜歡這個包。而且使用它的最終用戶可能也比urllib3更多。後者更偏底層,並且考慮到它對內部的控制級別,它一般是作為其他項目的依賴項。

7、Certifi

近年來,幾乎所有網站都轉向 SSL,你可以通過地址欄中的小鎖符號來識別它。加了小鎖意味著與該站點的通信是安全和加密的,能防止竊聽行為。

8、Idna

根據其 PyPI 頁面,idna提供了「對 RFC5891 中指定的應用程序中國際化域名(IDNA)協議的支持。」

IDNA的核心是兩個函數:ToASCII和ToUnicode。ToASCII會將國際 Unicode 域轉換為 ASCII 字元串。ToUnicode則逆轉該過程。在IDNA包中,這些函數稱為idna.encode()和idna.decode()

9、PyYAML

YAML是一種數據序列化格式。它的設計宗旨是讓人類和計算機都能很容易地閱讀代碼——人類很容易讀寫它的內容,計算機也可以解析它。

PyYAML是 Python 的YAML解析器和發射器,這意味著它可以讀寫YAML。它會把任何 Python 對象寫成YAML:列表、字典,甚至是類實例都包括在內。

10、Pyasn1

像上面的IDNA一樣,這個項目也非常有用:

ASN.1 類型和 DER/BER/CER 編碼(X.208)的純 Python 實現

所幸這個已有數十年歷史的標准有很多信息可用。ASN.1是 Abstract Syntax Notation One 的縮寫,它就像是數據序列化的教父。它來自電信行業。也許你知道協議緩沖區或 Apache Thrift?這就是它們的 1984 年版本。

11、Docutils

Docutils是一個模塊化系統,用來將純文本文檔處理為很多有用的格式,例如 HTML、XML 和 LaTeX 等。Docutils能讀取reStructuredText格式的純文本文檔,這種格式是類似於 MarkDown 的易讀標記語法。

12、Chardet

你可以用chardet模塊來檢測文件或數據流的字元集。比如說,需要分析大量隨機文本時,這會很有用。但你也可以在處理遠程下載的數據,但不知道用的是什麼字元集時使用它。

13、RSA

rsa包是一個純 Python 的 RSA 實現。它支持:

  • 加密和解密

  • 簽名和驗證簽名

  • 根據 PKCS#1 1.5 版生成密鑰

它既可以用作 Python 庫,也能在命令行中使用。

14、Jmespath

JMESPath,發音為「James path」,使 Python 中的 JSON 更容易使用。它允許你聲明性地指定如何從 JSON 文檔中提取元素。

15、Setuptools

它是用於創建 Python 包的工具。不過,其文檔很糟糕。它沒有清晰描述它的用途,並且文檔中包含無效鏈接。最好的信息源是這個站點,特別是這個創建 Python 包的指南。

16、Pytz

像dateutils一樣,這個庫可幫助你處理日期和時間。有時候,時區處理起來可能很麻煩。幸好有這樣的包,可以讓事情變得簡單些。

17、Futures

從 Python 3.2 開始,python 提供current.futures模塊,可幫助你實現非同步執行。futures 包是該庫適用於 Python 2 的 backport。它不適用於 Python3 用戶,因為 Python 3 原生提供了該模塊。

18、Colorama

使用 Colorama,你可以為終端添加一些顏色:

更多Python知識請關注Python自學網

4. 使用 Python 讀寫文件

有些數據是臨時的,它們在應用程序運行時存儲在內存中,然後丟棄。但是有些數據是持久的。它們存儲在硬碟驅動器上供以後使用,而且它們通常是用戶最關心的東西。對於程序員來說,編寫代碼讀寫文件是很常見的,但每種語言處理該任務的方式都不同。本文演示了如何使用 Python 處理文件數據。

在 Linux 上,你可能已經安裝了 Python。如果沒有,你可以通過發行版軟體倉庫安裝它。例如,在 CentOS 或 RHEL 上:

在 macOS 上,你可以使用 MacPorts或Homebrew安裝。在 Windows 上,你可以使用Chocolatey安裝。

一旦安裝了 Python,打開你最喜歡的文本編輯器,准備好寫代碼吧。

如果你需要向一個文件中寫入數據,記住有三個步驟:

這與你在計算機上編碼、編輯照片或執行其他操作時使用的步驟完全相同。首先,打開要編輯的文檔,然後進行編輯,最後關閉文檔。

在 Python 中,過程是這樣的:

這個例子中,第一行以 模式打開了一個文件,然後用變數 f 表示,我使用了 f 是因為它在 Python 代碼中很常見,使用其他任意有效變數名也能正常工作。

在打開文件時,有不同的模式:

第二行表示向文件中寫入數據,本例寫入的是純文本,但你可以寫入任意類型的數據。

最後一行關閉了文件。

對於快速的文件交互,常用有一種簡短的方法可以寫入數據。它不會使文件保持打開狀態,所以你不必記得調用 close 函數。相反,它使用 with 語法:

如果你或你的用戶需要通過應用程序需要向文件中寫入一些數據,然後你需要使用它們,那麼你就需要讀取文件了。與寫入類似,邏輯一樣:

同樣的,這個邏輯反映了你一開始使用計算機就已知的內容。閱讀文檔,你可以打開、閱讀,然後關閉。在計算機術語中,「打開」文件意味著將其載入到內存中。

實際上,一個文本文件內容肯定不止一行。例如,你需要讀取一個配置文件、 游戲 存檔或樂隊下一首歌曲的歌詞,正如你打開一本實體書時,你不可能立刻讀完整本書,代碼也只能解析已經載入到內存中的文件。因此,你可能需要遍歷文件的內容。

示例的第一行指明使用 模式打開一個文件,然後文件交由變數 f 表示,但就像你寫數據一樣,變數名是任意的。 f 並沒有什麼特殊的,它只是單詞 「file」 的最簡表示,所以 Python 程序員會經常使用它。

在第二行,我們使用了 line ,另一個任意變數名,用來表示 f 的每一行。這告訴 Python 逐行迭代文件的內容,並將每一行的內容列印到輸出中(在本例中為終端或IDLE)。

就像寫入一樣,使用 with 語法是一種更簡短的方法讀取數據。即不需要調用 close 方法,方便地快速交互。

使用 Python 有很多方法向文件寫入數據,包括用 JSON、YAML、TOML等不同的格式寫入。還有一個非常好的內置方法用於創建和維護SQLite資料庫,以及許多庫來處理不同的文件格式,包括圖像、音頻和視頻等。

via: https://opensource.com/article/21/7/read-write-files-python

作者:Seth Kenlon選題:lujun9972譯者:MjSeven校對:turbokernel

熱點內容
如何在iphone上玩安卓號 發布:2024-11-29 11:24:21 瀏覽:753
伺服器店鋪怎麼取名 發布:2024-11-29 11:19:26 瀏覽:3
phpapache日誌 發布:2024-11-29 11:07:26 瀏覽:309
國圖資料庫 發布:2024-11-29 10:34:15 瀏覽:541
vpn免流伺服器搭建 發布:2024-11-29 10:26:12 瀏覽:245
c源文件編譯後的擴展名為 發布:2024-11-29 10:08:40 瀏覽:924
腳本自動登錄 發布:2024-11-29 09:55:27 瀏覽:63
安卓的無線網路在哪裡 發布:2024-11-29 09:54:13 瀏覽:653
谷歌瀏覽器打開ftp 發布:2024-11-29 09:46:30 瀏覽:668
熱線女孩ftp 發布:2024-11-29 09:46:29 瀏覽:71