0

最初の 3 行を読み取り、それらを別のファイルnew.txtに入れたい巨大なファイルがあります。その後、再度 3 行を読み込みますが、最初からではなく、4 行目から 3 行を読み取る必要があります。

 1st line
 2nd line
 3rd line
 4th line
 5th line
 6th line
 7th line
 8th line
 9th line
 10th line
 ....

ファイル new.txt の最初の出力は次のようになります。

 1st line
 2nd line
 3rd line

ファイル new.txt の 2 番目の出力は次のようになります。

4th line
5th line
6th line
4

3 に答える 3

1

このようなもの - 代わりにifile-obj を直接使用できることに注意してください。

from itertools import islice

r = range(20)
i = iter(r)

while True:
    lines = list(islice(i, 3))
    if not lines:
        break
    print lines

[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9, 10, 11]
[12, 13, 14]
[15, 16, 17]
[18, 19]
于 2012-11-30T09:36:27.087 に答える
0

また、カーソル位置を取得することもできます f.tell()

次のコマンドを使用して、カーソルをファイル内の位置に移動できます。 f.seek()

ここをチェックしてください:http://docs.python.org/2/library/stdtypes.html#file.seek

于 2012-11-30T09:42:47.037 に答える
0

ファイルは反復子であるため、入力を 3 つの項目ごとにグループ化するだけです。

iterttoolsモジュールには、イテレータをグループ化するためのレシピが付属しています。

from itertools import izip_longest

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

これで、入力ファイルの行を 3 つのグループにグループ化できます。

with open(inputfilename) as infile:
    for threelines in grouper(3, infile, ''):
        with open(outputfilename, 'w') as outfile:
            outfile.write(''.join(threelines))
于 2012-11-30T09:37:07.553 に答える