4

たくさんの行を含むファイルがあります。各行の開始に対応するバイトオフセットのリストがあります。バイトオフセットに対応する各行が必要です。UNIX、Perl、または Python でこれを行う方法はありますか? 説明されているよりもはるかに大きな規模でこれを行う必要があります。

ファイル:

abcd
bcde
cdef

バイト オフセット:

0
10

望ましい出力:

abcd
cdef
4

5 に答える 5

5
with open(filename, 'r') as f:    
    for offset in offsets:
        f.seek(offset)
        print(f.readline())

参考文献:

于 2012-12-12T16:35:30.587 に答える
4

急ごしらえパール:

my @offsets = ( 0, 10 );

open (my $data, '<', 'file.txt') || die "Can't open input: $!\n";

foreach my $offset (@offsets) 
{
    seek( $data, $offset, 0 );
    my $line = <$data>;
    print $line;
}

close $data;
于 2012-12-12T16:45:06.430 に答える
1

seek()必要なバイト位置に移動してから読み取ります。これは、Python と Perl からは簡単で、シェル スクリプトから実行できるはずです (私は考えていddます)。

于 2012-12-12T16:35:49.623 に答える
1

終わったとき(unutbuのおかげで)

#!/usr/bin/python
f = open(file_name, 'r')
offsets = [0,10]
for offset in offsets:
    f.seek(offset)
    print f.readline().strip()
于 2012-12-12T16:52:35.920 に答える
0

これでうまくいくはずです。

def get_lines_by_offset(filename, *offsets):
    with open(filename, "r") as fp:
        results = []
        for offset in offsets:
            fp.seek(offset)
            results.append(fp.readline().strip())
    return results
于 2012-12-12T16:36:16.983 に答える