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

Python 以指定的字节偏移量从文件中获取行,python,perl,parsing,unix,Python,Perl,Parsing,Unix,我有一个有很多行的文件。我有一个对应于每行开头的字节偏移量列表。我想要与字节偏移量对应的每一行。在unix、perl或python中是否有这样做的方法?我必须以比描述的更大的规模来做这件事 文件: 字节偏移量: 0 10 期望输出: abcd cdef 参考资料: seek()到所需的字节位置,然后读取。这在Python和Perl中应该很容易实现,在shell脚本中也可以实现(我认为dd) def get_lines_by_offset(filename, *offsets):

我有一个有很多行的文件。我有一个对应于每行开头的字节偏移量列表。我想要与字节偏移量对应的每一行。在unix、perl或python中是否有这样做的方法?我必须以比描述的更大的规模来做这件事

文件:

字节偏移量:

0
10
期望输出:

abcd
cdef
参考资料:

seek()
到所需的字节位置,然后读取。这在Python和Perl中应该很容易实现,在shell脚本中也可以实现(我认为
dd

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
快速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;
my@offset=(0,10);
打开(我的$data,当我结束时(感谢unutbu)


tail-c+$OFFSET
进行搜索,然后
head-n1
只获取第一行。是的,应该可以。这有点痛苦,所以我会选择脚本语言。你甚至可以在Awk中进行。如果所需行分布不太稀疏,读取和丢弃不需要的行甚至可能比重复搜索更快d、 你可以在shell脚本中使用
sh
。我认为这类似于在shell脚本中使用
tail-c+$2$1 | head-n1
,然后说
cat byte-offset.file | xargs-n1 yourscript.sh line.file
。谢谢,我最后得到了:f=open(filename,'r')offset=[0,10]作为偏移量中的偏移量:f.seek(offset)打印f.readline().strip()+1不仅是为了阻止向下投票的驱动器。这显然是一个编程问题。+1,但强烈建议
打开我的$fh,'
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
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;
#!/usr/bin/python
f = open(file_name, 'r')
offsets = [0,10]
for offset in offsets:
    f.seek(offset)
    print f.readline().strip()