当前位置: 首页>>代码示例>>Python>>正文


Python TarInfo.frombuf方法代码示例

本文整理汇总了Python中tarfile.TarInfo.frombuf方法的典型用法代码示例。如果您正苦于以下问题:Python TarInfo.frombuf方法的具体用法?Python TarInfo.frombuf怎么用?Python TarInfo.frombuf使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在tarfile.TarInfo的用法示例。


在下文中一共展示了TarInfo.frombuf方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: generate_catalog

# 需要导入模块: from tarfile import TarInfo [as 别名]
# 或者: from tarfile.TarInfo import frombuf [as 别名]
def generate_catalog(args, recsize, out=stdout, verbose=0):
  out.write(''.join( str(i % 10) for i in xrange(1,recsize) ) + '\n')
  args.sort()
  recno = 0
  errno = 0
  for fname in args:
    if verbose:
      print >>stderr, 'reading: %r...' % fname
    name = basename(fname)
    if name.endswith('.tar'):
      name = name[:-4]
    if recsize < (len(name) + 9):
      print >>stderr, 'tarfile %r does not fit to the catalog record size.' % fname
      errno = 1
      continue
    name += ' '*(recsize-9-len(name))
    missing = 'x'*(recsize-1)
    tarfp = file(fname, 'rb')
    while 1:
      offset = tarfp.tell()
      buf = tarfp.read(BLOCKSIZE)
      if len(buf) != BLOCKSIZE: break
      try:
        info = TarInfo.frombuf(buf)
      except ValueError:
        print >>stderr, '%r: tar record corrputed at offset=%d' % (fname, offset)
        errno = 1
        break
      size = ((info.size + BLOCKSIZE-1) / BLOCKSIZE) * BLOCKSIZE
      data = tarfp.read(size)
      if len(data) != size:
        print >>stderr, '%r: premature eof at offset=%d' % (fname, offset)
        errno = 1
        break
      recid = int(info.name[:8], 16)
      if recid < recno:
        print >>stderr, '%r: duplicated recno: %d at offset=%d' % (fname, recid, offset)
        errno = 1
        continue
      if recno < recid:
        print >>stderr, '%r: missing recno: %d-%d' % (fname, recno, recid-1)
        for _ in xrange(recno, recid):
          out.write(missing+'\n')
        recno = recid
        errno = 1
      out.write('%08x%s\n' % (offset, name))
      recno += 1
    tarfp.close()
  return errno
开发者ID:yasusii,项目名称:shaling,代码行数:51,代码来源:recover_maildb.py

示例2: get_info

# 需要导入模块: from tarfile import TarInfo [as 别名]
# 或者: from tarfile.TarInfo import frombuf [as 别名]
 def get_info(self, recno):
   if not self.mode:
     raise TarDB.FileError('get_info: not opened: %r' % self)
   try:
     (name, offset) = self._catalog.get(recno)
   except Catalog.InvalidRecord:
     raise TarDB.InvalidRecord(recno)
   tarfp = self._get_tarfile(name)
   tarfp.seek(offset)
   buf = tarfp.read(BLOCKSIZE)
   if len(buf) != BLOCKSIZE:
     raise TarDB.Corrupted('get_info: premature eof in info block: %r, recno=%d, info_offset=%d' % (self, recno, offset))
   try:
     return TarInfo.frombuf(buf)
   except ValueError:
     raise TarDB.Corrupted('get_info: tar record corrupted: %r, recno=%d, info_offset=%d' % (self, recno, offset))
开发者ID:yasusii,项目名称:shaling,代码行数:18,代码来源:tardb.py

示例3: get_recinfo

# 需要导入模块: from tarfile import TarInfo [as 别名]
# 或者: from tarfile.TarInfo import frombuf [as 别名]
 def get_recinfo(self, recno, data=False):
     (idx, offset) = self._get_catent(recno)
     if self._ridx != idx:
         if self._rtar is not None:
             self._rtar.close()
         assert idx in self._files
         path = os.path.join(self.basedir, self._files[idx])
         self._rtar = open(path, mode='rb')
         self._ridx = idx
     self._rtar.seek(offset)
     buf = self._rtar.read(BLOCKSIZE)
     info = TarInfo.frombuf(buf, 'utf-8', 'ignore')
     if data:
         b = self._rtar.read(info.size)
     else:
         b = None
     return (info, b)
开发者ID:euske,项目名称:verbose-giggle,代码行数:19,代码来源:tardb.py

示例4: generate_labelidx

# 需要导入模块: from tarfile import TarInfo [as 别名]
# 或者: from tarfile.TarInfo import frombuf [as 别名]
def generate_labelidx(args, prefix, verbose=0):
  import re, struct
  pat = re.compile(r'([0-9a-f]{8})\.(.*)')
  valid_labels = re.compile(r'[0-9a-zA-Z]')
  labelmap = {}
  errno = 0
  for fname in args:
    if verbose:
      print >>stderr, 'reading: %r...' % fname
    tarfp = file(fname, 'rb')
    while 1:
      offset = tarfp.tell()
      buf = tarfp.read(BLOCKSIZE)
      if len(buf) != BLOCKSIZE: break
      try:
        info = TarInfo.frombuf(buf)
      except ValueError:
        print >>stderr, '%r: tar record corrputed at offset=%d' % (fname, offset)
        errno = 1
        break
      size = ((info.size + BLOCKSIZE-1) / BLOCKSIZE) * BLOCKSIZE
      data = tarfp.read(size)
      if len(data) != size:
        print >>stderr, '%r: premature eof at offset=%d' % (fname, offset)
        errno = 1
        break
      m = pat.match(info.name)
      if not m:
        print >>stderr, '%r: invalid name %r at offset=%d' % (fname, info.name, offset)
        errno = 1
        continue
      (recno, labels) = m.groups()
      recno = int(recno, 16)
      for label in valid_labels.findall(labels):
        if label not in labelmap: labelmap[label] = []
        labelmap[label].append(recno)
    tarfp.close()
  #
  for (label,recnos) in labelmap.iteritems():
    fname = '%s_%02x' % (prefix, ord(label))
    recnos.sort(reverse=True)
    data = struct.pack('>%di' % len(recnos), *recnos)
    fp = file(fname, 'wb')
    fp.write(data)
    fp.close()
  return errno
开发者ID:yasusii,项目名称:shaling,代码行数:48,代码来源:recover_maildb.py

示例5: _get_catalog

# 需要导入模块: from tarfile import TarInfo [as 别名]
# 或者: from tarfile.TarInfo import frombuf [as 别名]
 def _get_catalog(self):
   for fname in os.listdir(self.basedir):
     try:
       idx = self.name2idx(fname)
     except ValueError:
       continue
     try:
       fp = file(os.path.join(self.basedir, fname), 'rb')
     except IOError, e:
       raise TarDB.FileError(e)
     while 1:
       offset = fp.tell()
       buf = fp.read(BLOCKSIZE)
       if len(buf) != BLOCKSIZE: break
       info = TarInfo.frombuf(buf)
       size = ((info.size + BLOCKSIZE-1) / BLOCKSIZE) * BLOCKSIZE
       if len(fp.read(size)) != size: break
       yield (idx, offset)
     fp.close()
开发者ID:yasusii,项目名称:fooling,代码行数:21,代码来源:tardb.py

示例6: get_record

# 需要导入模块: from tarfile import TarInfo [as 别名]
# 或者: from tarfile.TarInfo import frombuf [as 别名]
  def get_record(self, recno):
    if not self._mode: raise TarDB.FileError('not open: %r' % self)
    (idx, offset) = self.get_filepos(recno)
    fp = self._get_fp(idx)
    try:
      fp.open()
    except FileLock.Failed, e:
      raise TarDB.LockError(e)
    fp.seek(offset)
    buf = fp.read(BLOCKSIZE)
    if len(buf) != BLOCKSIZE:
      raise TarDB.Corrupted('get_record: premature eof info: %r, recno=%d, info_offset=%d' %
                            (self, recno, offset))
    try:
      info = TarInfo.frombuf(buf)
    except ValueError:
      raise TarDB.Corrupted('get_record: record corrupted: %r, recno=%d, offset=%d' %
                            (self, recno, offset))
    data = fp.read(info.size)
    if len(data) != info.size:
      raise TarDB.Corrupted('get_record: premature eof data: %r, recno=%d, info_offset=%d' %
                            (self, recno, offset))
    fp.close()
    return (info, data)

  def get_info(self, recno):
    if not self._mode: raise TarDB.FileError('not open: %r' % self)
    (idx, offset) = self.get_filepos(recno)
    fp = self._get_fp(idx)
    try:
开发者ID:yasusii,项目名称:fooling,代码行数:32,代码来源:tardb.py


注:本文中的tarfile.TarInfo.frombuf方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。