如何读取 sFTP 服务器上的 gzip 压缩文件?
How do I read a gzipped zip file on an sFTP server?
在 sFTP 服务器上,我有 gzip 文件,每个文件包含一个 zip 文件,而这些文件又包含多个文件。我想要检索的是 zip 文件中包含的文件的完整列表。到目前为止,这是我通过谷歌搜索整理的内容,但它似乎没有做任何事情。 gziplist
虽然有效。
关于我做错了什么或更好的想法 - 更好的方法?
ssh_stdin, ssh_stdout, ssh_stderr = conn.exec_command(f'ls /{client}/Data/ | grep ".ZIP.gz"\n', get_pty=True)
gziplist = []
for i in ssh_stdout.read().decode("utf-8").split('\r\n'):
gziplist.append(i)
ssh_stdin, ssh_stdout, ssh_stderr = conn.exec_command(f'zless /{client}/Data/{i}\n', get_pty=True)
gzcontent = ''
for line in ssh_stdout.readlines():
gzcontent = gzcontent+line
gzfile = gzip.open(gzcontent)
content = gzfile.read()
contentbytes = zipfile.ZipFile(io.BytesIO(content))
print(contentbytes.namelist())
正如 Martin 所建议的,我删除了 get_pty=True,这解决了问题。还必须调整我的其余代码,因为我像往常一样在后面的行中犯了更多错误。
for i in ssh_stdout.read().decode("utf-8").split('\r\n'):
gziplist.append(i)
ssh_stdin2, ssh_stdout2, ssh_stderr2 = conn.exec_command(f'zless {client}/Data/{i}\n')
content = ssh_stdout2.read()
contentbytes = zipfile.ZipFile(io.BytesIO(content))
print(contentbytes.namelist())
在 sFTP 服务器上,我有 gzip 文件,每个文件包含一个 zip 文件,而这些文件又包含多个文件。我想要检索的是 zip 文件中包含的文件的完整列表。到目前为止,这是我通过谷歌搜索整理的内容,但它似乎没有做任何事情。 gziplist
虽然有效。
关于我做错了什么或更好的想法 - 更好的方法?
ssh_stdin, ssh_stdout, ssh_stderr = conn.exec_command(f'ls /{client}/Data/ | grep ".ZIP.gz"\n', get_pty=True)
gziplist = []
for i in ssh_stdout.read().decode("utf-8").split('\r\n'):
gziplist.append(i)
ssh_stdin, ssh_stdout, ssh_stderr = conn.exec_command(f'zless /{client}/Data/{i}\n', get_pty=True)
gzcontent = ''
for line in ssh_stdout.readlines():
gzcontent = gzcontent+line
gzfile = gzip.open(gzcontent)
content = gzfile.read()
contentbytes = zipfile.ZipFile(io.BytesIO(content))
print(contentbytes.namelist())
正如 Martin 所建议的,我删除了 get_pty=True,这解决了问题。还必须调整我的其余代码,因为我像往常一样在后面的行中犯了更多错误。
for i in ssh_stdout.read().decode("utf-8").split('\r\n'):
gziplist.append(i)
ssh_stdin2, ssh_stdout2, ssh_stderr2 = conn.exec_command(f'zless {client}/Data/{i}\n')
content = ssh_stdout2.read()
contentbytes = zipfile.ZipFile(io.BytesIO(content))
print(contentbytes.namelist())