web-dev-qa-db-ja.com

cat、grep、cut-pythonに翻訳

おそらくこれに対する十分な質問や解決策があるかもしれませんが、私はこの1つの質問で自分自身を助けることはできません:私はbashスクリプトで使用している次のコマンドを持っています:

var=$(cat "$filename" | grep "something" | cut -d'"' -f2)    

さて、いくつかの問題のため、すべてのコードをpythonに変換する必要があります。以前にpythonを使用したことはありませんが、postetコマンドが何をすることができるかまったくわかりません。pythonでそれを解決する方法はありますか?

34
dnc

式を翻訳するには、python言語とその標準ライブラリをよりよく理解する必要があります

cat "$ filename" :ファイルを読み取りますcat "$filename"およびコンテンツを標準出力にダンプします

|:パイプは、前のコマンドからstdoutをリダイレクトし、次のコマンドのstdinに送ります

grep "something" :正規表現somethingプレーンテキストデータファイル(指定されている場合)またはstdinを検索し、一致する行を返します。

cut -d '"' -f2 :特定の区切り文字で文字列を分割し、結果のリストから特定のフィールドをインデックス化/スプライスします

同等のPython

cat "$filename"  | with open("$filename",'r') as fin:        | Read the file Sequentially
                 |     for line in fin:                      |   
-----------------------------------------------------------------------------------
grep 'something' | import re                                 | The python version returns
                 | line = re.findall(r'something', line)[0]  | a list of matches. We are only
                 |                                           | interested in the zero group
-----------------------------------------------------------------------------------
cut -d'"' -f2    | line = line.split('"')[1]                 | Splits the string and selects
                 |                                           | the second field (which is
                 |                                           | index 1 in python)

組み合わせ

import re
with open("filename") as Origin_file:
    for line in Origin_file:
        line = re.findall(r'something', line)
        if line:
           line = line[0].split('"')[1]
        print line
71
Abhijit

Pythonでは、外部依存関係がないため、次のようなものになります(テストされていません)。

with open("filename") as Origin:
    for line in Origin:
        if not "something" in line:
           continue
        try:
            print line.split('"')[1]
        except IndexError:
            print
8
Paulo Scardine

os.systemモジュールを使用してシェルコマンドを実行する必要があります

import os
os.system('command')

後で使用するために出力を保存する場合は、subprocessモジュールを使用する必要があります

import subprocess
child = subprocess.Popen('command',stdout=subprocess.PIPE,Shell=True)
output = child.communicate()[0]
5
Hackaholic

コマンドをpythonに変換するには、以下を参照してください:-

1)catコマンドの代替が開いています これを参照 。以下はサンプルです

>>> f = open('workfile', 'r')
>>> print f

2)grepコマンドの代替参照 this

3)Cutコマンドの代替参照 this

2
Hussain Shabbir

ファイルの行をループする必要があります。 stringメソッド について学ぶ必要があります

with open(filename,'r') as f:
    for line in f.readlines():
        # python can do regexes, but this is for s fixed string only
        if "something" in line:
            idx1 = line.find('"')
            idx2 = line.find('"', idx1+1)
            field = line[idx1+1:idx2-1]
            print(field)

ファイル名をpythonプログラム に渡すためのメソッド)が必要です。また、その間、検索する文字列も...

将来的には、可能であればより焦点を絞った質問をするようにしてください。

2
gboffi