Что лучший способ состоит в том, чтобы распаковать gzip'ed ответ сервера в Python 3?

Вы получаете ошибку, потому что sftp.get возвращает Buffer, и вы пытаетесь передать ее функции, которая ожидает Stream.

Измените свой код на этот

let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");

sftp.connect({
  host: 'HOST',
  port: 'PORT',
  username: 'USERNAME',
  password: 'PASSWORD'
}).then(() => {
  return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
  csv()
    .fromString(data.toString()) // changed this from  .fromStream(data)
    .subscribe(function(jsonObj) { //single json object will be emitted for each csv line
      // parse each json asynchronousely
      return new Promise(function(resolve, reject) {
        resolve()
        console.log(jsonObj);
      })
    })
}).catch((err) => {
  console.log(err, 'catch error');
});

7
задан 2 revs, 2 users 97% 24 November 2011 в 14:22
поделиться

2 ответа

прекрасно работает с gzip (gzip и zlib - одно и то же сжатие, но с разными заголовками/"обертыванием". Ваша ошибка имеет эту информацию в сообщении).

import gzip
import urllib.request

request = urllib.request.Request(
    "http://google.com/search?q=foo",
    headers={
        "Accept-Encoding": "gzip",
        "User-Agent": "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11", 
    })
response = urllib.request.urlopen(request)
gzipFile = gzip.GzipFile(fileobj=response)
gzipFile.read()
18
ответ дан 6 December 2019 в 06:38
поделиться

В Python 3, StringIO класс в io модуль.

Таким образом для примера Вы связались с, если Вы изменяетесь:

import StringIO
compressedstream = StringIO.StringIO(compresseddata)

кому:

import io
compressedstream = io.StringIO(compresseddata)

это должно работать.

5
ответ дан 6 December 2019 в 06:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: