day5模塊學習--yaml文件處理

来源:http://www.cnblogs.com/gengcx/archive/2017/07/24/7226896.html
-Advertisement-
Play Games

yaml文件處理(http://pyyaml.org/wiki/PyYAMLDocumentation) 摘要: 本文講的是yaml在python上的使用教程詳解, YAML是一種容易人類閱讀、適合表示程式語言的數據結構、可用於不同程式間交換數據、支持泛型工具、支持串列處理、豐富的表達能力和可擴展性 ...


yaml文件處理(http://pyyaml.org/wiki/PyYAMLDocumentation)

    摘要: 本文講的是yaml在python上的使用教程詳解, YAML是一種容易人類閱讀、適合表示程式語言的數據結構、可用於不同程式間交換數據、支持泛型工具、支持串列處理、豐富的表達能力和可擴展性、易於使用的語言。YAML利用縮進或者是explicit indicatior(如{})來表示屬。

    YAML是一種容易人類閱讀、適合表示程式語言的數據結構、可用於不同程式間交換數據、支持泛型工具、支持串列處理、豐富的表達能力和可擴展性、易於使用的語言。YAML利用縮進或者是explicit indicatior(如{})來表示屬性的嵌套,更為直觀和simple。

    YAML用來做配置文件,很多項目的配置文件都是yaml文件格式。

  一、YAML的格式

 

  YAML的格式及特點如下:

 

  YAML使用可列印的Unicode字元,可使用UTF-8或UTF-16。
  使用空白字元為文件縮排來表示結構;不過不能使用跳格字元(TAB)。
  註解由井字型大小( # )開始,可以出現在一行中的任何位置,而且範圍只有一行(也就是一般所謂的單行註解)
  每個清單成員以單行表示,並用短杠+空白( -   )起始。或使用方括弧( [ ] ),並用逗號+空白( ,   )分開成員。
  每個雜湊表的成員用冒號+空白( :   )分開鍵值和內容。或使用大括弧( {   } ),並用逗號+空白( ,   )分開。
  雜湊表的鍵值可以用問號 ( ? )起始,用來明確的表示多個辭彙組成的鍵值。
  字串平常並不使用引號,但必要的時候可以用雙引號 ( " )或單引號 ( ' )框住。
  使用雙引號表示字串時,可用倒斜線( \ )開始的跳脫字元(這跟C語言類似)表示特殊字元。
  區塊的字串用縮排和修飾詞(非必要)來和其他資料分隔,有新行保留(preserve)(使用符號 | )或新行摺疊(flod)(使用符號 > )兩種方式。
  在單一檔案中,可用連續三個連字型大小(---)區分多個檔案。
  另外,還有選擇性的連續三個點號( ... )用來表示檔案結尾。
  重覆的內容可使從參考標記星號 ( * )複製到錨點標記( & )。
  指定格式可以使用兩個驚嘆號 ( !! ),後面接上名稱。
  檔案中的單一文件可以使用指導指令,使用方法是百分比符號( % )。有兩個指導指令在YAML1.1版中被定義:
   %YAML 指導指令,用來識別文件的YAML版本。
   %TAG 指導指令,被用在URI的字首標記。這個方法在標記節點的型態時相當有用。
  YAML再使用逗號及冒號時,後面都必須接一個空白字元。

  二、PyYAML的使用

  1、安裝

  python下安裝PyYAML模塊可以使用YAML ,打開https://pypi.python.org/pypi/PyYAML下載,當前版本3.11 。pypi 站點上對該模塊的描述如下:PyYAML features a complete YAML 1.1 parser, Unicode support, pickle support, capable extension API, and sensible error messages 。

  可以連網的主機也可以通過pip install pyyaml 或easy_install pyymal 進行安裝。

  2、yaml.load與yaml.dump方法

  該模塊提供了一些方法,不過常用的方法只有兩個yaml.load和yaml.dump,以下是一個版本相關的yaml格式文件:

yaml文件:
treeroot: branch1: name: Node
1 branch1-1: name: Node 1-1 branch2: name: Node 2 branch2-1: name: Node 2-1 程式處理: import yaml with open("yaml文件","r") as f: message = yaml.load(f) print(type(message),message) 運行結果如下: <class 'dict'> {'treeroot': {'branch1': {'name': 'Node 1', 'branch1-1': {'name': 'Node 1-1'}}, 'branch2': {'name': 'Node 2', 'branch2-1': {'name': 'Node 2-1'}}}}

  yuml.dump方法:

    這裡還承接上面的腳本,調用裡面的dataMap 數據,將其保存一直新的yaml 文件,如下:

    import yaml
  with open("yaml文件","r") as f:

  message = yaml.load(f)

  f1 = open("new_yaml.yaml","w")
  yaml.dump(message,f1)
  f1.close()

    new_yaml.yaml的結果如下:

    treeroot:
    branch1:
      branch1-1: {name: Node 1-1}
      name: Node 1
    branch2:
      branch2-1: {name: Node 2-1}
      name: Node 2
 

    三、yaml 在python語言中的應用

    yaml 語言在很多優秀的python 程式中都有使用,比如運維工程師經常使用的兩個自動化工作saltstack 與 Ansible 。更多PyYAML 模塊的用法,也可以查看其官方wiki頁 

  YAML的適用範圍

  由於實現簡單,解析成本很低,YAML特別適合在腳本語言中使用.列一下現有的語言現現:Ruby,Java,Perl,Python,PHP,OCaml,JavaScript。除了Java,其他都是腳本語言.YAML比較適合做序列化。因為它是宿主語言數據類型直轉的。

  YAML做配置文件也不錯。比如Ruby on Rails的配置就選用的YAML。對ROR而言,這很自然,也很省事.由於相容性問題,不同語言間的數據流轉建議現在不要用YAML.

    YAML文件及處理:

yaml文件:
name: Tom Smith
age: 37
spouse:
    name: Jane Smith
    age: 25
children:
 - name: Jimmy Smith
   age: 15
 - name1: Jenny Smith
   age1: 12
 - work: dataanalysis
   date: 2017-5-18

#yaml處理腳本
import yaml

f = open("new_yaml.yaml","r")
message = yaml.load(f)
f.close()
print(message)

運行結果如下:
{'name': 'Tom Smith', 'spouse': {'name': 'Jane Smith', 'age': 25}, 'age': 37, 'children': [{'name': 'Jimmy Smith', 'age': 15}, {'age1': 12, 'name1': 'Jenny Smith'}, {'date': '2017-5-18', 'work': 'dataanalysis'}]}

    從上面可以看出,"-"代表統計,生成的時候會是一個列表的形式,這樣可用於字典下麵嵌套列表,文件前面有幾個"-"代表嵌套了幾層字典。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本篇為rsync官方推薦文章How Rsync Works的翻譯,主要內容是Rsync術語說明和簡單版的rsync工作原理。本篇沒有通篇都進行翻譯,前言直接跳過了,但為了文章的完整性,前言部分的原文還是保留了。 How Rsync WorksA Practical Overview Foreword ...
  • 1. 首先進入單用戶模式: 1). ubuntu : 上述情況可以在grub界面選擇第二項修複,但沒有grub可以參考: 1、重啟ubuntu,隨即長按shirft進入grub菜單; 2、選擇recovery mode,按"e"鍵進入編輯頁面;如下: 非恢復模式為: 3、將ro recovery n ...
  • 1.先創建一個文件夾用以存放鏡像 2.運行vmware,點擊創建新的虛擬機 3.選擇典型安裝 4. 選擇稍後安裝操作系統 5.選擇客戶機操作系統為Linux,版本為CentOS 64位 6. 選擇一開始創建的用以存放鏡像的文件,並給虛擬機命名 7.選擇磁碟大小,選擇預設20G即可 8.點擊完成 9. ...
  • 做為程式員的我們,經常會要用到文件的上傳和下載功能。到了需要用的時候,各種查資料。有木有..有木有...。為了方便下次使用,這裡來做個總結和備忘。 利用表單實現文件上傳 最原始、最簡單、最粗暴的文件上傳。 前端代碼: 【註意】 1、需要post提交 2、enctype="multipart/form ...
  • 背水一戰 Windows 10 之 控制項(媒體類): 通過處理 Pointer 相關事件實現一個簡單的塗鴉板, InkCanvas 基礎知識 ...
  • 一個基於Entity Framework的自定義分頁,增刪改的通用實現,同時包含Entity的生成,Specification模式,Unit of Work實現。 ...
  • 引子在此前的一篇文章中,我介紹瞭如何在本地docker環境中運行ASP.NET Core跨平臺應用程式(http://www.cnblogs.com/chenxizhang/p/7148657.html),看起來非常不錯,不是嗎?那麼,如果我們希望真正在實際的生產環境去部署和運行這個應用程式,應該怎... ...
  • 在上一篇的EF之DB First中,存在以下的兩個問題: 1. 添加/編輯頁面顯示的是屬性名稱,而非自定義的名稱(如:姓名、專業...) 2. 添加/編輯時沒有加入驗證 3. 數據展示使用分頁 @Html.LabelFor(model => model.Name, htmlAttributes: n ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...