1

これは簡単なことですが、for ループを機能させる方法がよくわかりません。

私の最初のファイルは、2 列のデータの長いリストです。

ROW    VALUE
0      165   
1      115
2      32
3      14
4      9
5      0
6      89
7      26
.       .
406369  129
406370  103

私の 2 番目のファイルは、重要な行番号のリストです。

1
43
192
so on

私がやりたいことは、ファイル 1 の目的の行番号に移動し、値列がゼロになるまで行ごとに下に移動することだけです。出力は、重要な行番号のリストと、それに続く最初のファイルがゼロになるまでの行数のリストになります。たとえば、ファイル #2 からの重要な行番号 "1" の出力は 3 になるはずです。これは、3 つの行があり、ファイル #1 で値が 0 になるためです。どんな助けにも感謝します!開始したスクリプトがいくつかあり、それが役立つ場合は編集で投稿できます。ありがとう!

編集:

私が開始したいくつかのスクリプト:

for line in important_rows_file:
    line = line.strip().split()
    positive_starts.append(int(line[2])

countsfile = []
for line in file:
    line = line.strip().split()
    countsfile.append([line[0]] + [line[1]])

count = 0
i = 0
for i in range(0, len(countsfile)):
    for start in positive_starts:
    if int(countsfile[start + i][1]) > 0:
            count = count + 1
    else:
            count = count

……次はわからない

4

1 に答える 1

0

これを行うには2つの方法があります。

最初の方法では、すべての行番号についてメモリー内に辞書を作成します。これは、次の場合に適した方法です。この同じデータを何度も再利用する予定です (保存して読み戻すことができます)、または b. 2 番目のファイルから多くの行を処理しようとしています (つまり、ほとんどの行でこれを行う必要があります)。2 番目の方法は、特定の行番号に対して 1 回限りの処理を行うだけです。

これを入力ファイルとして指定すると、次のようになります。

ROW    VALUE
0      165
1      115
2      32
3      14
4      9
5      0
6      89
7      26
8      13
9      0

方法 1.

ref_dict = {}
with open("so_cnt_file.txt") as infile:
    next(infile)
    cur_start_row = 0
    cur_rows = []
    for line in infile:
        row, col = [int(val) for val in line.strip().split(" ") if val]
        if col == 0:
            for cur_row in cur_rows:
                ref_dict[cur_row] = row - cur_row - 1
            cur_start_row = row
            cur_rows = []
            continue
        cur_rows.append(row)
print ref_dict

出力

{0: 4, 1: 3, 2: 2, 3: 1, 4: 0, 6: 2, 7: 1, 8: 0}

方法 2

def get_count_for_row(row=1):
    with open("so_cnt_file.txt") as infile:
        for i in range(0, row + 2):
            next(infile)
        cnt = 0
        for line in infile:
            row, col = [int(val) for val in line.strip().split(" ") if val]
            if col == 0:
                return cnt
            cnt += 1
print get_count_for_row(1)
print get_count_for_row(6)

出力

3
2

これは、1 回の呼び出しで対象のすべての行を取得するソリューションです。

def get_count_for_rows(*rows):
    rows = sorted(rows)
    counts = []
    with open("so_cnt_file.txt") as infile:
        cur_row = 0
        for i in range(cur_row, 2):
             next(infile)
        while rows:
            inrow = rows.pop(0)
            for i in range(cur_row, inrow):
                next(infile)
            cnt = 0
            for line in infile:
                row, col = [int(val) for val in line.strip().split(" ") if val]
                if col == 0:
                    counts.append((inrow, cnt))
                    break
                cnt += 1
            cur_row = row
    return counts

print get_count_for_rows(1, 6)

出力

[(1, 3), (6, 2)]
于 2013-04-22T23:40:33.887 に答える