Python Scripts vs. Bash-2またはTips&Tricks

画像

かなり前に Pythonスクリプトを使用してシステムを操作する基本的な例を挙げた記事を書きまし 。 短いフレーズ(トピックの名前を見てください)が原因で、この記事には全体的であまり特徴のないコメントがかなり寄せられました。 誰かがPythonの管理機能を利用したいと思ったかもしれません(今ではこの種のPythonツールが人気を集めています)。 では、志を同じくする人々をあなたのキャンプに誘ってみませんか? :)会う-さまざまな目的のための簡単なトリックの小さな選択。



ファイルなど



だから、すぐに! 最初に、通常の手順を実行します-ファイルをコピーします。 裸のCで書かなければならなかったこの恐怖を今でも覚えています。1行ずつファイルを変数に読み込み、別のアドレスに書き換えます...しかし、もっと簡単な方法を使用できます。 :) Linuxを思い浮かべる最初の方法は、おそらく、

Copy Source | Copy HTML import subprocess subprocess .Popen( 'cp /usr/share/file.txt /home/user/file.txt' , shell=True)



  1. Copy Source | Copy HTML import subprocess subprocess .Popen( 'cp /usr/share/file.txt /home/user/file.txt' , shell=True)



  2. Copy Source | Copy HTML import subprocess subprocess .Popen( 'cp /usr/share/file.txt /home/user/file.txt' , shell=True)





ここでのみ、bashまたはそれに類似したインタープリタがある場合にのみ、同様の方法が機能します(まあ、またはエイリアスの登録が必要です)。 なんで? 結局のところ、優れたshutilモジュールメソッドを使用できます。

Copy Source | Copy HTML



  1. 輸入シャティル
  2. shutil .copyfile( "C:\\ My Documents \\ mydoc.doc""C:\\ My Documents \\ mydoc_2.doc"


名前の変更も同様の方法で行われます。

Copy Source | Copy HTML



  1. 輸入 OS
  2. os .rename( "/home/user/testfile.txt""/home/user/test.txt"


os.remove()を使用して、それぞれファイルを削除できます。



ファイルにデータを書き込むには、python write()と「stream」オプション(slyplususniki、こんにちは)の両方を使用できます。

Copy Source | Copy HTML



  1. myfile = open"/home/user/testfile.txt""w"
  2. 印刷 >> myfile、 「Guidoでビールを飲みたい」
  3. myfile.close()


upd:ユーザー名からのより現代的な方法 画像 bioroot (バージョン2.6以降でのみデフォルトで有効になっています。2.5では__future__から取得できます:

>> __future__ import with_statementから):

Copy Source | Copy HTML



  1. myfile として open"/home/user/testfile.txt""w" )で:
  2. 印刷 >> myfile、 「Guidoでビールを飲みたい」




場合によっては(たとえば、ログを読み取るとき)、ファイルを最後から1行ずつ読み取る必要がある場合があります。 これは基本的な方法で行われます:

Copy Source | Copy HTML



  1. 逆行open"/ var / log / messages" ).readlines())の場合:
  2. 印刷ライン


また、特定の番号の行を読み取るには、シート内のファイルの標準読み取りとlinecacheモジュールの両方を使用できます。

Copy Source | Copy HTML



  1. line = linecache .getline( "C:\\ test.txt"2
  2. 印刷ライン
  3. #または
  4. line = open"C:\\ test.txt" ).readlines()[ 1 ]
  5. 印刷ライン


ところで、バイナリファイルを読むことはもう難しくありません。

Copy Source | Copy HTML



  1. pic = open"C:\\ Pictures \\ V4erashnaya_pyanka.bmp""rb"
  2. buf = pic.read( 5#最初の5バイトを読み取る
  3. 印刷 buf


さらに、迷子にならないために:

Copy Source | Copy HTML



  1. print pic.tell() #ファイルの先頭からのバイト数
  2. pic.seek(0) #トップに戻る




たとえば、プラグインをサポートするプログラムを作成する場合、特定のディレクトリ内のファイルを反復処理する必要がある場合があります。

Copy Source | Copy HTML



  1. os .listdirのファイル名( "../plugins" ):
  2. 印刷 (ファイル名)


そして、マスクでも同じことができます:

Copy Source | Copy HTML



  1. インポートグロブ
  2. globのファイル名。 glob"../plugins/*.zip" ):
  3. 印刷ファイル名


Parsimパス:

Copy Source | Copy HTML



  1. print os .path.dirname( "/home/user/test.txt")# ディレクトリ名
  2. print os .path.basename( "/home/user/test.txt")# ファイル名


デフォルトのブラウザでアドレスまたはローカルファイルを開きます(たとえば、ウィンドウについてのリンクを作成する場合)。

Copy Source | Copy HTML



  1. ウェブブラウザをインポートする
  2. ウェブブラウザ オープン'http://www.habrahabr.ru/'
  3. ウェブブラウザ open (u 'file://home/user/mysite.html'
  4. ウェブブラウザ open (u 'mailto:foo@bar.com?subject = Feedback%20message'


行またはファイルのエンコーディングを決定するには、便利なchardetモジュールを使用できます。エンコーディングが返されるだけでなく、美しい辞書で正しく定義されていることを「確信」します。

Copy Source | Copy HTML



  1. 輸入シャルデット
  2. str = open"/home/user/myfile.txt""r" )。 readline ()
  3. enc = chardet.detect(str)
  4. 印刷 enc [ 'confidence' ]
  5. print enc [ 'encoding' ]


たとえば、以前は未知のエンコーディングで文字列をコーディングする必要がある場合に非常に便利です。 確かに、macエンコーディングを決定する問題に遭遇しました(単純なASCIIが常に返されますが、そのために一部の文字が通常どおりにエンコードされないこともポピーです)。 いずれにせよ、Linuxの方が簡単です-encaiconvがあります :)



まあ、今のところ十分ですか? この傾向が気に入ったら、システム管理にPythonを使用することについての説明を続け、いくつかの実用的な例を書いてみます。 そして、はい、Python Cookbookのようなものに感謝します!



All Articles