如何将 zip 文件中的 DBF 文件加载到变量而不用 Python 解压?

问题描述 投票:0回答:1

我正在尝试将 zip 文件中包含的 DBF 文件加载到变量中,而不解压 zip 文件。我尝试使用以下代码,但它不起作用:

import zipfile
from dbfread import DBF

def load_dbf_from_zip(zip_filename):
    with zipfile.ZipFile(zip_filename, 'r') as z:
        dbf_filename = z.namelist()[0]
        with z.open(dbf_filename) as f:
            dbf = DBF(f)
    return dbf

dbf = load_dbf_from_zip('my_zip_file.zip')

此代码不起作用,因为它尝试使用 DBF 构造函数从 zip 文件中读取 DBF 文件,该构造函数需要文件对象作为输入。但是,ZipFile 类的 open() 方法返回一个 ZipExtFile 对象,它不是文件对象。

如何在不解压 zip 文件的情况下将 DBF 文件加载到变量中?

python zip dbf python-zipfile
1个回答
0
投票

看来你不能。您正在使用的库需要 filename 作为 DBS()

 的第一个参数,然后尝试打开并读取文件本身。此外,
DBS
类似乎在内部函数中多次打开和读取文件,因此您不能只创建一个临时文件并在实例化
DBS(filename)
后将其删除。不幸的是,很愚蠢。

您必须将文件提取到磁盘或创建一个

NamedTemporaryFile

,向其中写入数据并将其名称传递给 DBS
。该文件应该与您使用的 
DBS
 类一样长。

总的来说,我想说这个库提供了一个相当差的界面,底层文件甚至可能发生变化,并且库会在更改后重新打开它,我不确定这是否是人们通常所期望的。

© www.soinside.com 2019 - 2024. All rights reserved.