Python 以指定的字节偏移量从文件中获取行
我有一个有很多行的文件。我有一个对应于每行开头的字节偏移量列表。我想要与字节偏移量对应的每一行。在unix、perl或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):
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()