使用python os walk解压缩30,000个子文件夹中的bz2文件?

时间:2017-12-07 22:57:24

标签: python compression os.walk bz2

我有30,000个文件夹,每个文件夹包含5个bson数据的bz2文件。

我正在尝试使用os.walk()循环遍历文件路径并解压缩每个压缩文件并保存在原始目录中。

import os
import bz2

path = "/Users/mac/PycharmProjects/OSwalk/Data"
for(dirpath,dirnames,files) in os.walk(path):

for filename in files:
    filepath = os.path.join(dirpath , filename)
     newfilepath = os.path.join(dirpath , filename + '.decompressed')

        with open(newfilepath , 'wb') as new_file , 
          bz2.BZ2File(filepath , 'rb') as file:

              for data in iter(lambda: file.read(100 * 1024) , b''):
                  new_file.write(data)

运行代码时出现以下错误。

File 
"/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/_compr 
ession.py", line 103, in read
data = self._decompressor.decompress(rawblock, size)
OSError: Invalid data stream

我已经读过使用解压缩器方法在mac上运行代码可能会出现问题,或者我错过了其他内容?

1 个答案:

答案 0 :(得分:0)

看起来您可能正在尝试解压缩已经解压缩的结果。你应该过滤掉它们。

  SparseMatrix<double>::iterator smi = matrix.begin();
  SparseMatrix<double>::iterator smi_end = matrix.end();

  unsigned int row,col;
  double val;
  for (; smi!=smi_end; ++smi)
  {
       row = smi->row();
       col = smi->column();
       val = smi->value();

       spMat.insert(row, col) = val; 
       std::cout << val << std::endl; 
  }