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

快速perl:

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 来说应该很容易,并且可以通过 shell 脚本来实现(我在想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 回答