我正在尝试将 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 文件加载到变量中?
看来你不能。您正在使用的库需要 filename 作为 DBS()
的第一个参数,然后尝试打开并读取文件本身。此外,
DBS
类似乎在内部函数中多次打开和读取文件,因此您不能只创建一个临时文件并在实例化
DBS(filename)
后将其删除。不幸的是,很愚蠢。您必须将文件提取到磁盘或创建一个 ,向其中写入数据并将其名称传递给
DBS
。该文件应该与您使用的
DBS
类一样长。总的来说,我想说这个库提供了一个相当差的界面,底层文件甚至可能发生变化,并且库会在更改后重新打开它,我不确定这是否是人们通常所期望的。