Python生態工具、文本處理和系統管理(虛擬)

1、Python生態工具

  1、Python內置小工具

  一、秒級啓動一個下載服務器

  Python 內置了一個下載服務器就可以顯著提高效率了 。 例如, 你的同事要讓你傳的文件位於某一個目錄下,那麼,你能夠進入這個目 錄 , 而後執行下面的命令啓動一個下載服務器html

Python2實現:

    python -m SimpleHTTPServer


Python3實現:

  在 Python 3 中,因爲對系統庫進行了從新整理,所以,使用方式會有不一樣:
    python -m http.server

   執行上面的命令就會在當前目錄下啓動一個文件下載服務器, 默認打開 8000 端口 。 完成之後,只須要將 IP 和端口告訴同事,讓同事本身去操做便可,很是方便高效 。python

  效果以下:git

  

  注意:若是當前目錄下存在一個名爲 index .html 的文件,則 默認顯示該文件的內容 。 若是當前目錄下不存在這樣一個文件,則默認顯示當前目錄下的文件列表。github

   二、字符串轉換爲JSON

  需求:在工做過程當中,咱們的系統會調用底層服務的 API。底層服務的 API通常都以 JSON 的格式返回,爲了便於問題追蹤,咱們會將 API 返回的 JSON 轉換爲字符串記錄到日誌文件中。 當須要分析問題時,就須要將日誌文件中的 JSON 字符串拿出來進行分析 。這個時候,須要將一個 JSON 字符串轉換爲 JSON 對象,以提升日誌的可讀性 。web

  解決:這個需求十分常見,以致於使用搜索引擎搜索 叮SON」,處於搜索結果的第一項即是「在線 JSON 格式化工具」 。 除了打開瀏覽器,使用在線 JSON 格式化工具之外,咱們也可使用命令行終端的 Python 解釋器來解析 JSON 串,以下所示:macos

# echo '{" job":" developer"," name":" lmx"," s ex":"male " }' |python -m json.tool
{
    " job": " developer",
    " name": " lmx",
    " s ex": "male "
}

  使用命令行解釋器解析JSON 串很是方便,並且,爲了便於閱讀,該工具還會自動將轉換的結果進行對齊和格式化。 以下所示:編程

# echo '{"signing": { "default": { "expiry": "8760h" }, "profiles": { "kubernetes-Soulmate": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "8760h" } } } }'|python  -m  json.tool
{
    "signing": {
        "default": {
            "expiry": "8760h"
        },
        "profiles": {
            "kubernetes-Soulmate": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}

   2、pip的高級用法

  一、pip經常使用子命令

    一、pip的子命令對照表

  

    二、系統安裝pip

  進入https://pypi.python.org/pypi/pip,下載第二項。json

    

  解壓下載的文件(windows下只用解壓工具解壓如RAR,Linux下終端輸入tar -xf pip-10.0.1.tar.gz,即tar -xf 文件名),進入解壓後的文件夾中,調出命令行窗口或者終端flask

wget https://files.pythonhosted.org/packages/ae/e8/2340d46ecadb1692a1e455f13f75e596d4eab3d11a57446f08259dee8f02/pip-10.0.1.tar.gz
tar xf pip-10.0.1.tar.gz
cd pip-10.0.1/
##Linux下操做用戶是普通用戶須要sudo受權操做
python setup.py install
##查看版本信息
pip -v

  若安裝報下面的錯誤vim

# python setup.py install
Traceback (most recent call last):
  File "setup.py", line 6, in <module>
    from setuptools import setup, find_packages

  解決辦法以下(完美解決問題)

wget http://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg
sh setuptools-0.6c11-py2.7.egg
    三、查找安裝包
pip search flask
    四、安裝特定的安裝包版本
pip install flask==0.8
    五、刪除/卸載安裝包
pip uninstall Werkzeug
    六、查看安裝包的信息(-f顯示安裝包所在的目錄)
pip show flask
    七、查看安裝包的依賴是否完整
pip check flask
    八、列出已安裝的包(有兩種方法)

    pip list (-o 查詢可升級的包)

  

     pip freeze

  

     九、導出系統已安裝的安裝包列表到 requirements 文件
pip freeze > requirements.txt
    十、從requirements文件安裝須要的包
pip install -r requirements.txt 
    十一、使用pip命令補全
pip completion --bash >~/.profile
$ source ~/.profile
    十二、下載包不安裝
pip install <包名> -d <目錄> 或 pip install -d <目錄> -r requirements.txt
    1三、打包
pip wheel <包名>
    1四、升級指定的包(有兩種方式)
pip install -U <包名>
或:pip install <包名> --upgrade
    1五、升級pip
pip install -U pip

  二、加速pip安裝的技巧

  使用Python時間比較長的話,會發現 Python 安裝的一個問題,即 pypi.python.org 不是特別穩定,有時候會很慢,甚至處於徹底不可用的狀態。

    一、使用豆瓣或者阿里雲的源加速軟件安裝

  咱們國內目前有多個pypi鏡像,推薦使用豆瓣的鏡像源或阿里的鏡像源。

國內的鏡像源地址:
阿里:https://mirrors.aliyun.com/pypi/simple
豆瓣:http://pypi.douban.com/simple
中國科學技術大學:http://pypi.mirrors.ustc.edu.cn/simple/

  單次使用安裝源:若是要使用第三方的源,只須要在安裝時,經過 pip 命令的-i 選項指定鏡像源便可。以下所示:(包名放置先後都可)

pip install -i http://pypi.douban.com/simple flask

  指定全局安裝源

  在unix和macos,配置文件爲:$HOME/.pip/pip.conf
  在windows上,配置文件爲:%HOME%\pip\pip.ini

[global]
timeout = 6000
  index-url = http://pypi.douban.com/simple
文件內容
    二、將軟件下載到本地部署

  若是須要對大批量的服務器安裝軟件包,而且安裝包比較多或者比較大,則能夠考慮將軟件包下載到本地,而後從本地安裝。 這對於使用腳本部署大量的服務器很是有用 ,此外,對於服務器沒法鏈接外網的狀況,也可使用這種方法。以下所示:

  下載到本地

pip install download='pwd' -r requirements.txt

  本地安裝

pip install --no-index -f file.//'pwd' -r requirements.txt

  使用這種方式,只須要下載次,就能夠多處安裝,不用擔憂網絡不穩定的問題 。 例如,咱們經過這種方式下載 Flask 到當前目錄下,則 Flask 的 依賴 click 、itsdangerous 、 Jinja二、Markup Safe 和 Werkzeug 也會被下載到本地。

pip install --download='pwd' flask

   3、Python編輯器

   一、Linux環境:編輯Python的vim插件

  vim是一個功能強大、高度可定製的文本編輯器,與Emacs一塊兒成爲Linux下最著名的文本編輯器。

  vim最強大的地方在於快速移動和高度可定製,因此使用vim編寫Python代碼時,只須要進行簡單的定製就可以大幅提升編碼效率。

    一、一鍵執行

  一鍵執行功能不是一個插件,而是自定義的vim配置。若是咱們寫的Python代碼是一些較爲簡單的腳本,那麼,這個一鍵執行的功能會很是實用。將下面的配置放在vim的配置文件當中,編寫完Python代碼之後,按F5就實現了一鍵執行功能。該功能最實用的是編寫單元測試,寫完測試不用退出vim,當即執行就能看到結果,很是方便。

  配置鏈接地址:https://blog.csdn.net/u010871058/article/details/54253774

  vimPython配置版:https://www.cnblogs.com/cjy15639731813/p/5886158.html

  

    二、代碼補全插件snipmate

  代碼補全可以顯著減小敲鍵的次數,將咱們從瑣碎的語法中解放出來。絕不誇張地說,代碼補全插件可以幫咱們寫一半的代碼。例如,使用snipmate插件,輸入ifmain後按tab鍵將會自動生成下面的代碼:

  

    三、語法檢查插件 Syntastic 

  Syntastic是一款強大的語法檢查插件,當咱們保存源文件時,它就會執行。執行完之後,會提示咱們哪些代碼存在語法錯誤,哪些代碼不符合編碼規範,並給出具體的提示信息。例如,Python代碼風格默認設置爲PEP8,即便咱們不太瞭解PEP8的代碼風格,只要使用了Syntastic插件,並根據它給出的提示進行修改,就可以寫出徹底符合PEP8風格的代碼。

     四、編程提示插件jedi-vim

  jedi-vim是基於jedi的自動補全插件,與snipmate不一樣的是,該插件更加智能。jedi-vim更貼切的稱呼是「編程提示」,而不是代碼補全插件。須要注意的是,使用jedi-vim插件前須要在電腦中安裝jedi。這個插件是Python的標配。

  jedi是一個自動補全和靜態分析的Python庫,直接使用pip安裝便可:

pip install jedi

  使用jedi-vim編寫Python的代碼效果圖

  

  二、Windows環境:Python編輯器PyCharm介紹

  PyCharm是由JetBrains打造的一款功能強大的Python IDE 也是目前最流行的 Python IDE。JetBrains是捷克一家軟件開發公司,該公司最爲人熟知的產品是一款名爲 IntelliJ IDEA的Java IDE 。IntelliJ IDEA是Eclipse最大的競爭對手,而且,很多資深的軟件工程師 都認爲,IntelliJ IDEA 比 Eclipse更加智能、更加好用。能夠看到,JetBrains 算得上是一家歷史悠久的開發編輯器的公司,正由於該公司在編輯器領域的多年沉澱、對編輯器的易用性有深入的理解和獨到的看法,使得PyCharm一經推出就受到了Python工程師的普遍關注 。

  PyCharm是一款很現代的編輯器,幾乎包含了全部現代編輯器應有的功能:

  1. 代碼補全;
  2. 代碼高亮;
  3. 項目管理;
  4. 智能提示;
  5. 代碼風格檢查;
  6. 集成單元測試;
  7. 集成版本控制工具;
  8. 圖形界面調試;
  9. 方便的重構工具;
  10. 快捷鍵支持;
  11. 大量的插件。

   4、Python代碼規範檢查

  Python 官方給出的編碼規範 PEP 8 ,而後介紹檢查代碼是否符合規範的工具 pycodestyle ,以及能夠將代碼風格格式化成 PEP 8 的 autopep8 。

  一、PEP 8編碼規範

    一、PEP 8編碼規範介紹

  Python代碼給人的第一印象就是顏值高、簡潔優美、可讀性強。這一方面是由於Python語言自身的優秀設計,如經過統一的縮進來表示代碼塊,經過減小多餘的符號使得代碼更加簡潔;另外一方面是由於Python代碼有着較爲統一的編碼風格。

  PEP 8自己只是編碼風格方面的建議,並不強制工程師遵循。可是,因爲該建議被Python工程師普遍接納,所以,它已經成爲了事實上的標準。

  PEP8編碼規範詳細地給出了Python編碼的指導,包括對齊規則、包的導人順序、空格與註釋、命名習慣和異常處理等Python編程的方方面面,而且提供了詳細的示例。

    二、PEP 8編碼規範指導手冊

  官網手冊:https://www.python.org/dev/peps/pep-0008/

  中文手冊:https://blog.csdn.net/ratsniper/article/details/78954852

    三、注意事項

  在Python2中,相對導入又能夠分爲顯式相對導入和隱式相對導入,而在Python3中,已經棄用了隱式相對導入。

  Python中支持相對導人和絕對導人,推薦使用絕對導人。由於絕對導人可讀性更好,也不容易出錨,即便出錯也會給出更加詳細的錯誤信息。

  二、使用pycodestype檢查代碼規範

  Python官方的代碼規範稱爲PEP8,這個檢查代碼風格的命令行工具叫陰間,很容易引發困惑。所以,Python之父提議將pep8這個命令行工具重命名爲 pycodestyle。

    一、安裝相關的插件
pip install peps
pip install pycodestyle
    二、對一個或多個文件運行 pycodestyle
方式一:
  pycodestyle --first optparse.py
方式二:
  pep8 optparse.py
    三、顯示不規範的源代碼
pycodestyle --show-source --show-pep8 test.py

  三、使用autopep8將代碼格式化

    一、autopep8簡介

  autopep8是一個開源的命令行工具,它可以將Python代碼自動格式化爲PEP8風格。autopep8使用pycodestyle工具來決定代碼中的哪部分須要被格式化,這可以修復大部分pycodestyle工具中報告的排版問題。autopep8自己也是一個Python語言編寫的工具。

    二、安裝autopep8
pip install autopep8
    三、autopep8的使用
autopep8 --in-place optparse.py

  --in-place參數相似於sed的-i參數,直接將修改結果保存到源文件中。若不加--in-place則只將結果輸出到控制檯,不修改源文件。
  autopep8 還存在--aggressive選項,使用該選項會執行更多實質性的更改,能夠屢次使用以達到更佳的效果

  5、Python工做環境管理

  Python2和Python3之間存在着較大的差別,而且,因爲各類緣由致使了Python2和Python3的長期共存。在實際工做過程當中,咱們可能會同時用到Python2和Python3,所以,須要常常在Python2和Python3之間進行來回切換。

  這涉及到兩個工具:pyenv和virtualenv。pyenv用於管理不一樣的Python版本,virtualenv用於管理不一樣的工做環境。

  部署應用:https://blog.csdn.net/lyintong/article/details/68491351

  一、注意pyenv和virtualenv的區別

  pyenv用以管理不一樣的Python版本,例如,你的系統工做時使用Python2.7.13,學習時使用Python3.6.0。

  virtualenv用以隔離項目的工做環境,例如,項目A和項目B都是使用Python2.7.13,可是,項目A須要使用Flask0.8版本,項目B須要使用Flask0.9版本。

  咱們只要組合pyenv和virtualenv這兩個工具,就可以構造Python和第三方庫的任意版本組合,擁有很好的靈活性,也避免了項目之間的相互干擾。

  virtualenv自己是一個獨立的工具,用戶能夠不使用pyenv而單獨使用virtualenv。可是,若是你使用了pyenv,就須要安裝pyenv-virtualenv插件,而不是經過virtualenv軟件使用virtualenv的功能。

  二、使用pyenv管理不一樣的Python版本

    一、pyenv簡介

  pyenv是一個Python版本管理工具,它可以進行全局的Python版本切換,也能夠爲單個項目提供對應的Python版本。使用pyenv之後,能夠在服務器上安裝多個不一樣的Python版本,也能夠安裝不一樣的Python實現。不一樣Python版本之間的切換也很是簡單。

    二、pyenv的安裝
一、選擇安裝到$HOME/.pyenv目錄
git clone https://github.com/yyuu/pyenv.git ~/.pyenv
2、配置環境變量 echo 'export PYENV_ROOT="$HOME/.pyenv"' >> /etc/profile echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >>/etc/profile
三、使環境變量當即生效
source /etc/profile
    三、pyenv的使用
1、查看一下有哪些版本的python 能夠安裝 
pyenv  install --list

2、安裝指定版本的Python
pyenv install -v 2.7.1  
pyenv install -v 3.6.1

3、卸載指定版本的Python
pyenv uninstall 2.7.1

4、查看全部的Python版本
pyenv versions

5、查看當前操做的Python版本
pyenv version

  注意:

  1. system 表明當前系統的python 版本
  2. 全局環境下的python不會自動加載到pyenv下,必定要本身再安裝一次各個版本的python

  三、使用virtualenv管理不一樣的項目

    一、virtualenv簡介

  virtualenv 自己是個獨立的項目,用以隔離不一樣項目的做環境 。

  用戶需求:用戶但願在項目A中使用Flask0.8這個版本,與此同時,又想在項目B中使用Flask0.9這個版本。若是咱們全局安裝Flask,必然沒法知足用戶的需求。這個時候,咱們就可使用virtualenv。

  咱們只要組合pyenv和virtualenv這兩個工具,就可以構造Python和第三方庫的任意版本組合,擁有很好的靈活性,也避免了項目之間的相互干擾。

  virtualenv自己是一個獨立的工具,用戶能夠不使用pyenv而單獨使用virtualenv。可是,若是你使用了pyenv,就須要安裝pyenv-virtualenv插件,而不是經過virtualenv軟件使用virtualenv的功能。

    二、pyenv-virualenv的安裝
git clone https://github.com/yyuu/pyenv-virtualenv.git
echo 'eval "$( pyenv virtualenv - init -) "'>>/etc/profile
source /etc/profile
    三、pyenv-virualenv的使用

  有了pyenv-virtualenv之後,咱們能夠爲同一個Python解釋器,建立多個不一樣的工做環境。例如,咱們新建兩個工做環境:

pyenv virtualenv 2.7.13 first_project
pyenv virtualenv 2.7.13 second_project

  使用virtualenvs指明瞭查看工做環境

pyenv virtualenvs

  進入/退出/刪除virtualenv虛擬環境

1、activate進入一個工做環境
pyenv activate first_project

2、deactivate退出一個工做環境
pyenv deactivate first_project

三、
virtualenv-delete刪除虛擬環境
pyenv virtualenv-delete first_project

2、文本處理

  1、Jinja2

  中文文檔:https://www.kancloud.cn/manual/jinja2/70423

  一、模板介紹

  模板在Python的web開發中普遍使用,它可以有效地將業務邏輯和頁面邏輯分離,使得工程師編寫出可讀性更好、更加容易理解和維護的代碼。
  web開發是最須要使用模板的地方,可是,並非惟一可使用模板的地方。模板使用範圍比大多數工程師接觸的都要普遍,由於模板適合全部基於文本的格式,如HTML,XML,CSV,LaTeX等。
  使用模板可以編寫出可讀性更好、更容易理解和維護的代碼,而且使用範圍很是普遍,所以怎麼使用模板主要取決於工程師的想象力和創造力。例如,本書第十章即將介紹的Ansible就使用Jinja2來管理配置文件。
  做爲工程師,咱們也可使用Jinja2管理工做中的配置文件。一旦學會使用模板管理配置文件,就能夠擺脫無數瑣碎的文本替換工做。

  Python自帶的模板功能很是有限,例如沒法在模板中使用控制語句和表達式,不支持繼承和重用等操做。這對於web開發來講遠遠不夠,所以,出現了第三方的模板系統。目前市面上有很是多的模板系統,其中最知名的是Jinja2和Mako。

  二、Jinja2語法入門

  Jinja2是Flask做者開發的一個模板系統,起初是仿Django模板的一個模板引擎,爲Flask提供模板支持。可是,因爲其靈活、快速和安全等優勢被普遍使用。

    一、Jinja2模板引擎之因此使用普遍,是由於它具備如下優勢:
  • 相對於Template,Jinja2更加靈活,它提供了控制結構、表達式和繼承等,工程師能夠在模板中作更多的事情;
  • 相對於Mako,Jinja2提供了僅有的控制結構,不容許在模板中編寫太多的業務邏輯,避免了工程師亂用行爲;
  • 相對於Django模板,Jinja2的性能更好;
  • Jinja2模板的可讀性很好。
    二、Jinja2是Flask的一個依賴,若是已經安裝了Flask,Jinja2也會隨之安裝。固然,也能夠單獨安裝Jinja2
pip install jinja2
    三、語法塊

  在jinja2中,存在三種語法:

1 控制結構 {% %}
2 變量取值 {{ }} 
3 註釋    {# #}

  範例

{% block body %}
  <ul>
  {% for user in users %}
    <li><a href="{{ user.url }}">{{ user.username }}</a></li>
  {% endfor %}
  </ul>
{% endblock %}
    四、變量

  Jinja2模板中使用的 {{ }} 語法表示一個變量,它是一種特殊的佔位符,告訴模板引擎這個位置的值在渲染模板時獲取。Jinja2識別全部的Python數據類型,甚至是一些複雜的類型,如列表、字典和對象等

 

    五、Jinja2的過濾器

  變量能夠經過「過濾器」進行修改,過濾器能夠理解爲是Jinja2裏面的內置函數和字符串處理函數。

   Jinja2比較經常使用的過濾器:

  

  在Jinja2中,變量能夠經過「過濾器」修改,過濾器與變量用管道(|)分割。多個過濾器能夠鏈式調用,前一個過濾器的輸出會做爲後一個過濾器的輸入。以下所示:

   

    六、Jinja2的控制結構

  Jinja2中的if語句相似於Python中的if語句,可是,須要使用endif語句做爲條件判斷的結束。咱們可使用if語句判斷一個變量是否認義,是否爲空,是否爲真值。與Python中的if語句同樣,也可使用elif和else構建多個分支,以下所示:

  

     七、Jinja的for循環

  Jinja2中的for語句可用於迭代Python的數據類型,包括列表、元組和字典。在Jinja2中不存在while循環,這也符合了Jinja2的「提供僅有的控制結構,不容許在模板中編寫太多的業務邏輯,避免了工程師亂用行爲」設計原則。

  

  除了基本的for循環使用之外,Jinja2還提供了一些特殊的變量,咱們不用定義就能夠直接使用這些變量。列出了Jinja2循環中能夠直接使用的特殊變量。

  

    六、Jinja2的宏

  Jinja2宏的簡單使用:http://makaidong.com/printN/3301_768547.html 

  Jinja2宏問題解決:https://blog.csdn.net/qq_34062683/article/details/78234695

  宏相似於語言中的函數,用於將行爲抽象成可重複調用的代碼塊。與函數同樣。宏分爲定義與調用兩個階段。

  

  在宏的定義中,使用macro關鍵字定義一個宏,input是宏的名稱。它有三個參數,分別是name,type和value,其中type和value參數有默認值。能夠看到宏的定義與Python的函數定義很是類似,此外,它與Jinja2中的for循環和if語句同樣,不須要使用複合語句的冒號,使用endmacro結束宏的定義。
  下面是宏的調用,與函數調用相似:

   

import jinja2
rules={
"name":"xxxxxxx",
"rules":[
    {
        "alert": "z1",
        "expr": "up == 0",
        "duration": "1m",
        "enable": 1,
        "labels":{"labels1":"label1","label2":"label2"},
        "annotations":{"annotations":"annotations"}
    },
    {
        "alert": "z2",
        "expr": "up == 0",
        "duration": "1m",
        "enable": 1,
        "labels":{"label1":"label1","label2":"label2"},
        "annotations":{"annotation1":"annotation1", "annotation2":"annotation2"}
    }
],
"desc":"group DESC NEW1"
}
RENDER_RULES_TEMPLATE = """groups:
- name: {{ rules.name }}
  rules:
{%- for alert in rules.rules %}
  - alert: {{ alert.alert }}
    expr: {{ alert.expr}}
    for: {{ alert.duration }}
    labels:
  {%- for item in alert.labels %}
      {{ item }}: {{ alert.labels[item] }}
  {%- endfor %}
    annotations: 
  {%- for item in alert.annotations %}
      {{ item }}: {{ alert.annotations[item] }}
  {%- endfor %}
{% endfor %}
"""
result = jinja2.Template(source=RENDER_RULES_TEMPLATE).render(rules=rules)
with open('result.yml','w') as fp:
    fp.write(result)
jinja2宏應用:建立yaml文件
     九、Jinja2的集成和super函數

  若只是使用Jinja2進行配置文件管理,基本用不到Jinja2的繼承功能。若使用Jinja2進行web開發。

  Jinja2中最強大的部分就是模板繼承。模塊繼承容許你構建一個包含站點共同元素的基本模板「骨架」,並定義子模塊能夠覆蓋的塊。

3、Linux系統管理

  1、文件讀寫

  一、Python內置的open函數

  文件打開的模式

   

  操做示例

f = open('data1.txt','w',encoding='utf-8')

# print(f.read())
f.write('hello, world')
f.close()

   二、避免文件句柄泄露:使用try....finally

  使用try....finally

try:
    f = open('data.txt',encoding='utf-8')
    print(f.read())
finally:
    f.close()

  對於文件打開、處理、再關閉的邏輯,使用上下文管理器的代碼(使用with語句):

with open('data.txt',encoding='utf-8') as f:
    print(f.read())

  三、常見的文件操做函數

  Python的文件對象有多種類型的函數,如刷新緩存的flush函數,獲取文件位置的tell函數,改變文件讀取偏移量的seek函數。

    一、Python中讀的相關函數
  1. read :讀取文件中的全部內容 ;
  2. readline : 一次讀取一行;
  3. readlines :將文件內容存到一個列表中,列表中的每一行對應於文件中的一行 。

  read 函數和 readlines 函數都是一次就將全部內容讀入到內存中 。處理的是小文件仍是能夠的,若大文件,佔用內存太多,甚至會出現Out-Of-Memory錯誤。因此避免這樣操做。

    二、Python中寫的相關函數
  1. write:寫字符串到文件中,並返回寫入的字符數;
  2. writelines:寫一個字符串列表到文件中。

   在Python中,除了使用文件對象的write函數和writelines函數向文件寫入數據之外,也可使用print函數將輸出結果輸出到文件中。print函數比write和writelines函數更加靈活。

# 導入功能模塊
from
__future__ import print_function with open('data.txt','w') as f: print(1, 2, 'hello world', sep=",", file=f)

  四、Python的文件是一個可迭代對象

  Python的for循環不但能夠遍歷如字符串、列表、元組這樣的可迭代徐磊,還可使用迭代器協議遍歷可迭代對象。Python的文件對象實現了迭代器協議。

with open('data.txt') as inf:
    for line in inf:
        print(line.upper())

  五、案例:將文件中全部單詞的首字母變成大寫

    一、實現方式一:with語句
with open('data.txt') as inf, open('out.txt', 'w') as outf:
    for line in inf:
        outf.write(" ".join([word.capitalize() for word in line.split()]))
        outf.write("\n")
    二、實現方式二:print函數來簡化輸出語句
from __future__ import print_function

with open('data.txt') as inf, open('out_print.txt', 'w') as outf:
    for line in inf:
        print(*[word.capitalize() for word in line.split()], file=outf)

  2、文件與文件路徑管理

  一、知識點鏈接

  詳情見Python的os模塊:http://www.cnblogs.com/happy-king/p/7704487.html#_label4

  二、案例:打印最經常使用的10條Linux命令

  當咱們在Shell中輸入命令並執行時,有很是多的快捷鍵能夠提升咱們的工做效率。例如,咱們能夠在Bash中使用ctrl+r搜索曾經執行過的Linux命令,之因此可使用ctrl+r搜索曾經執行過的Linux命令是由於Bash跟蹤用戶以前輸入過的命令,並將其保存在~./bash_history文件中。咱們可使用history命令或者直接讀取~./bash_history文件的內容來查看命令歷史。

  搜索歷史命令的快捷鍵:ctrl+r

  統計每條命令的出現次數,而後找出出現次數最多的10條命令。 

 1 import os
 2 from collections import Counter
 3 
 4 c = Counter()
 5 with open(os.path.expanduser('~/.bash_history')) as f:
 6     for line in f:
 7         cmd = line.strip().split()
 8         if cmd:
 9             c[cmd[0]] += 1
10 
11 
12 CmdCount=c.most_common(10)
13 print(CmdCount)
Python3實現

  3、文件內容管理

  系統管理員在管理服務器時,可能會有這樣的疑問:

  1. 兩個目錄中的文件到底有什麼差異
  2. 系統中有多少重複文件存在
  3. 如何找到並刪除系統中的重複文件

  一、目錄和文件比較:filecmp模塊

    一、cmp函數

  filecmp模塊最簡單的函數是cmp函數,該函數用來比較兩個文件是否相同,若是文件相同,返回True,不然返回False。

    二、cmpfiles函數

  cmpfiles函數用來同時比較兩個不一樣目錄下的多個文件,而且返回一個三元組,分別包含相同的文件、不一樣的文件和沒法比較的文件。

  cmpfiles函數用來同時比較兩個目錄下的文件,也可使用該函數比較兩個目錄。可是,在比較兩個目錄時須要經過參數指定全部可能的文件,顯然比較繁瑣。

    三、dircmp函數

  調用dircmp函數之後會返回一個dircmp類的對象,該對象保存了諸多屬性,工程師能夠經過讀取這些屬性的方式獲取目錄之間的差別。

  filecmp 模塊的 dircmp 函數僅僅比較目錄下面的文件和子目錄 可是,並不會遞歸比較子目錄的內容 對於目錄, dircmp 函數也僅僅是比較函數的名稱 不會去比較子目錄裏面的內容。 

  二、使用Python管理壓縮包  

  shutil模塊:http://www.cnblogs.com/happy-king/p/7704487.html#_label6

相關文章
相關標籤/搜索