将 tar.gz 转换为 zip 时出现 NameError
NameError while converting tar.gz to zip
我从关于如何将 tar.gz 文件转换为 zip 文件的问题中得到以下代码。
import tarfile, zipfile
tarf = tarfile.open(name='sample.tar.gz', mode='r|gz' )
zipf = zipfile.ZipFile.open( name='myzip.zip', mode='a', compress_type=ZIP_DEFLATED )
for m in tarf.getmembers():
f = tarf.extractfile( m )
fl = f.read()
fn = m.name
zipf.writestr( fn, fl )
tarf.close()
zipf.close()
但是当我 运行 它时,我得到了错误。
我应该在代码中更改什么才能使其正常工作?
NameError: name 'ZIP_DEFLATED' is not defined
ZIP_DEFLATED
是一个名字defined by the zipfile
module;从那里引用它:
zipf = zipfile.ZipFile(
'myzip.zip', mode='a',
compression=zipfile.ZIP_DEFLATED)
注意这里不用ZipFile.open()
方法;您没有在存档中打开成员,您正在将 写入 对象。
此外,正确的 ZipFile
class signature 命名第三个参数 compression
。 compress_type
仅用作 ZipInfo
对象和 ZipFile.writestr()
方法的属性。第一个参数也没有命名为 name
;它是 file
,但您通常只需将值作为位置参数传递。
接下来,您无法在 gzip 压缩的 tar 文件中查找,因此如果您使用 tarf.getmembers()
,您将无法按顺序访问成员。这种方法必须全盘扫描找到所有成员建立列表,然后就不能再回去读取文件数据了。
相反,直接遍历对象,您将在某个点按顺序获得成员对象,您仍然可以读取文件数据:
for m in tarf:
f = tarf.extractfile( m )
fl = f.read()
fn = m.name
zipf.writestr( fn, fl )
我从关于如何将 tar.gz 文件转换为 zip 文件的问题中得到以下代码。
import tarfile, zipfile
tarf = tarfile.open(name='sample.tar.gz', mode='r|gz' )
zipf = zipfile.ZipFile.open( name='myzip.zip', mode='a', compress_type=ZIP_DEFLATED )
for m in tarf.getmembers():
f = tarf.extractfile( m )
fl = f.read()
fn = m.name
zipf.writestr( fn, fl )
tarf.close()
zipf.close()
但是当我 运行 它时,我得到了错误。
我应该在代码中更改什么才能使其正常工作?
NameError: name 'ZIP_DEFLATED' is not defined
ZIP_DEFLATED
是一个名字defined by the zipfile
module;从那里引用它:
zipf = zipfile.ZipFile(
'myzip.zip', mode='a',
compression=zipfile.ZIP_DEFLATED)
注意这里不用ZipFile.open()
方法;您没有在存档中打开成员,您正在将 写入 对象。
此外,正确的 ZipFile
class signature 命名第三个参数 compression
。 compress_type
仅用作 ZipInfo
对象和 ZipFile.writestr()
方法的属性。第一个参数也没有命名为 name
;它是 file
,但您通常只需将值作为位置参数传递。
接下来,您无法在 gzip 压缩的 tar 文件中查找,因此如果您使用 tarf.getmembers()
,您将无法按顺序访问成员。这种方法必须全盘扫描找到所有成员建立列表,然后就不能再回去读取文件数据了。
相反,直接遍历对象,您将在某个点按顺序获得成员对象,您仍然可以读取文件数据:
for m in tarf:
f = tarf.extractfile( m )
fl = f.read()
fn = m.name
zipf.writestr( fn, fl )