8

入力ファイルには 2 つの列があります。inputdata1.txt2 番目の for ループ内で の 2番目の列を印刷しようとしています。しかし、私のコードは機能していません。誰かが私に何をすべきか教えてもらえますか?

4

4 に答える 4

12
with open('inputdata1.txt') as inf:
    for line in inf:
        parts = line.split() # split line into parts
        if len(parts) > 1:   # if at least 2 parts/columns
            print parts[1]   # print column 2

これは、列が空白で区切られていることを前提としています。

関数split() では、さまざまなセパレータを指定できます。たとえば、列がカンマで区切られている場合、上記のコードで,使用します。line.split(',')

注: を使用withしてファイルを開くと、作業が完了したとき、または例外が発生した場合に、ファイルが自動的に閉じられます。

于 2012-06-20T01:23:09.887 に答える
8

このようなことができます。Separatorタブやカンマなど、ファイルが列を区切るために使用する文字です。

for line in open("inputfile.txt"):
    columns = line.split(separator)
    if len(columns) >= 2:
        print columns[1]
于 2012-06-20T01:22:36.920 に答える
5

クイックンダーティ

AWK がインストールされている場合:

# $2 for the second column
os.system("awk '{print $2}' inputdata1.txt")

クラスの使用

クラスを作成します。

class getCol:
    matrix = []
    def __init__(self, file, delim=" "):
        with open(file, 'rU') as f:
            getCol.matrix =  [filter(None, l.split(delim)) for l in f]

    def __getitem__ (self, key):
        column = []
        for row in getCol.matrix:
            try:
                column.append(row[key])
            except IndexError:
                # pass
                column.append("")
        return column

inputdata1.txtのようになります。

こんにちは世界
世界こんにちは

あなたはこれを得るでしょう:

print getCol('inputdata1.txt')[1]
#['lo', 'ld']

その他の注意事項

  • pyawkより多くの awk 機能に使用できます
  • Quick 'n dirtyメソッドを使用している場合subprocess.Popen
  • 区切り文字を変更できますgetCol('inputdata1.txt', delim=", ")
  • filter空の値を削除するか、コメントを解除するために使用しますpass
于 2015-04-02T09:30:31.430 に答える