1

ファイルから特定の行を読み取り、各チャンクのプロセスを終了した後に読み取りを続行しようとしています。たとえば、ファイルに 19000 行あります。毎回、最初の 19 行を抽出し、それらの行で計算を行い、出力を別のファイルに書き込みます。次に、次の 19 行を再度抽出して、同じ処理を行います。そこで、次の方法で行を抽出しようとしました。

n=19
x = defaultdict(list)

i=0

fp = open("file")
for next_n_lines in izip_longest(*[fp] *n):
    lines = next_n_lines

    for i, line in enumerate(lines): 
        do calculation
    write results

ここで、コードは最初のチャンクで機能します。次の n 個のチャンクを続行するにはどうすればよいですか? よろしくお願いします!

4

3 に答える 3

2

このソリューションでは、すべての行をメモリにロードする必要はありません。

n=19
fp = open("file")
next_n_lines = []
for line in fp:
    next_n_lines.append(line)
    if len(next_n_lines) == n:
        do caculation
        next_n_lines = []
if len(next_n_lines) > 0:
    do caculation
write results
于 2013-04-29T16:11:13.510 に答える
2

あなたの質問では明確ではありませんが、あなたが行う計算は、抽出したすべての N 行 (あなたの例では 19) に依存すると思います。

したがって、これらすべての行を抽出してから作業を行うことをお勧めします。

N = 19
inFile = open('myFile')
i = 0
lines = list()

for line in inFile:
    lines.append(line)
    i += 1
    if i == N:
        # Do calculations and save on output file
        lines = list()
        i = 0
于 2013-04-29T16:06:41.570 に答える