0

grep を使用する必要があるコードを Python で作成していますが、grep を使用してコードを実行する際に問題が発生しています。「Infile」から始めて、そのファイルを切り取り、並べ替えて「Infile.ids」を作成します。「Infile.ids」には、「Infile」にある一意の ID が含まれています。次に、「Infile.ids」から id を 1 行ずつ実行して 'Infile' に戻し、id を持つすべての行を新しい個別のファイルに抽出する必要があります。問題は、grepで実行すると、すべての行が一度に実行され、基本的に、個別の一意のファイルではなく、元の「Infile」と同一の一連のファイルが返されることです。

これらは、取得しようとしている「Infile」と出力ファイルの例です。

Infile              Infile.ids    Infile.Hello     Infile.World      Infile.Adios
Hello 1 3 5 7       Hello         Hello 1 3 5 7    World 2 4 6 8     Adios 1 2 3 4
World 2 4 6 8       World         Hello a b c d    World e f g h     Adios i j k l
Adios 1 2 3 4       Adios
Hello a b c d
World e f g h
Adios i j k l

これが私がこれまでに持っているコードです:

#!/usr/bin/python

import sys
import os

Infile = sys.argv[1]

os.system("cut -d \" \" -f1 %s | sort -u > %s.ids" % (Infile, Infile))
Infile2 = "%s.ids" % Infile

handle = open("%s.ids" % Infile, "r")
line = handle.readline()

for line in handle:
    os.system("grep \"%s\" %s > %s.%s" % (line, Infile, Infile, line))
    line = handle.readline()

handle.close()
4

1 に答える 1

0

を反復処理するとhandle、すべてlineの最後に改行が含まれますが、の行にはInfile明らかに含まれていません (最初に「1 3 5 7」が含まれています)。それがあなたのgrepが失敗している理由です。

やってみる

for line in handle.readlines():
    line = line.strip()
    os.system("grep \"%s\" %s > %s.%s" % (line, Infile, Infile, line))

両方のステートメントを削除します。ループline = handle.readline()を実行している場合はfor、読み取り行自体を反復処理します。明示的な読み取り呼び出しを使用する場合は、whileループの方が適切です (ただし、この場合はお勧めできません)。

乾杯

于 2013-04-08T10:49:06.730 に答える