从指定字节偏移量的文件中获取行

时间:2012-12-12 16:28:13

标签: python perl parsing unix

我有一堆行文件。我有一个与每行开头对应的字节偏移列表。我希望每行与字节偏移量相对应。有没有办法在unix,perl或python中执行此操作?我必须以比描述更大的规模来做到这一点。

文件:

abcd
bcde
cdef

字节偏移:

0
10

期望的输出:

abcd
cdef

5 个答案:

答案 0 :(得分:5)

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

参考文献:

答案 1 :(得分:4)

Quickie 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;

答案 2 :(得分:1)

当我结束时(感谢unutbu)

#!/usr/bin/python
f = open(file_name, 'r')
offsets = [0,10]
for offset in offsets:
    f.seek(offset)
    print f.readline().strip()

答案 3 :(得分:0)

seek()到所需的字节位置,然后读取。这应该很容易从Python和Perl开始,并且可以从shell脚本中完成(我在思考dd)。

答案 4 :(得分: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