在python中解压缩目录中的.bz2文件

在python中解压缩目录中的.bz2文件,python,compression,Python,Compression,我想解压缩文件夹中包含的一堆.bz2文件(其中还有.zst文件)。我现在做的是: destination_folder = "/destination_folder_path/" compressed_files_path="/compressedfiles_folder_path/" dirListing = os.listdir(compressed_files_path) for file in dirListing: if

我想解压缩文件夹中包含的一堆.bz2文件(其中还有.zst文件)。我现在做的是:

 destination_folder = "/destination_folder_path/"

 compressed_files_path="/compressedfiles_folder_path/"

 dirListing = os.listdir(compressed_files_path)

 for file in dirListing:

     if ".bz2" in file:

        unpackedfile = bz2.BZ2File(file)
        data = unpackedfile.read()
        open(destination_folder, 'wb').write(data)
但我不断收到以下错误消息:

Traceback (most recent call last):
  File "mycode.py", line 34, in <module>
    unpackedfile = bz2.BZ2File(file)
  File ".../miniconda3/lib/python3.9/bz2.py", line 85, in __init__
    self._fp = _builtin_open(filename, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'filename.bz2'
回溯(最近一次呼叫最后一次):
文件“mycode.py”,第34行,在
解包文件=bz2.bz2文件(文件)
文件“../miniconda3/lib/python3.9/bz2.py”,第85行,在__
self.\u fp=\u内置\u打开(文件名,模式)
FileNotFoundError:[Errno 2]没有这样的文件或目录:“filename.bz2”

为什么我会收到此错误?

您必须确保您使用的所有文件路径都存在。 最好使用打开文件的完整路径


导入操作系统
进口bz2
#此路径必须存在
destination_folder=“/full_path_to/folder/”
compressed_files_path=“/full_path_to_other/folder/”
#获取具有文件名(字符串)的列表
dirListing=os.listdir(压缩文件路径)
对于目录列表中的文件:
#^这只是filename.ext
如果文件中有“.bz2”:
#目录路径和文件名的串联。bz2
现有的\u文件\u路径=os.path.join(压缩的\u文件\u路径,文件)
#根据需要读取文件
解包文件=bz2.bz2文件(现有文件路径)
data=unpacdfile.read()
新建文件路径=os.path.join(目标文件夹,文件)
将bz2.open(新文件路径“wb”)作为f:
f、 写入(数据)
您还可以使用shutil模块复制或移动文件


\u bz2.py中的内置打开(文件名,模式)
要求在这里有完整的文件路径。你要传递给这个函数什么?嗨,谢谢你的快速回复!因此,这里我将传递给“open”目标文件夹的完整路径,即上面定义的“destination_folder”。如果您的bz2文件与使用它们的Python脚本位于同一目录中,您可以简单地使用。如果您的
压缩文件\u路径与脚本目录不相同,则需要使用文件的完整路径。太好了,它成功了,非常感谢!所以基本上问题是路径名?但这很奇怪,因为我确信这是一条完整正确的路径。另一个后续问题:我正试图在同一个文件夹中解压.zst文件。我是否可以像使用“bz2.BZ2File”一样简单而天真地使用这个函数“zstandard.ZstdDecompressor()”,或者它比这个更复杂?再次提前感谢您的帮助!在示例代码中,在读取数据后,您尝试打开文件夹-
open(destination\u folder,'wb')
。该函数用于打开文件。现在还不完全清楚你到底想对这些数据做什么。在我的示例中,我只是将数据从一个bz2文件保存到另一个不同文件夹中的bz2文件。这是可行的,但如果您想要不同的结果,请重写此部分。我不能说任何关于zstandard的事情。它看起来像是需要安装的第三方库。