Python: AttributeError: объект «генератор» не имеет атрибута «чтение» - PullRequest
1 голос
/ 02 декабря 2019

Я пытаюсь использовать этот класс Archive. Тем не менее, я получил объект "AttributeError: 'generator' не имеет атрибута" read "" из "return Archive ('r', strm.read ())".

class Archive(object):

    def __init__(self, mode, data=None):
        self.file = io.BytesIO(data)
        self.tar = tarfile.open(mode=mode, fileobj=self.file)

    def add_text_file(self, filename: str, text: str, encoding='utf-8'):
        """Add the contents of `text` to a new entry in the `tar`
        file.

        :return:
            self
        """
        b = text.encode(encoding)
        f = io.BytesIO(b)
        info = tarfile.TarInfo(filename)
        info.size = len(b)
        info.type = tarfile.REGTYPE
        info.mtime = time.time()

        self.tar.addfile(info, fileobj=f)
        return self

    def get_text_file(self, filename: str, encoding='utf-8') -> str:
        """Read the contents of a file in the archive.

        :return:
            contents of file in string.
        """
        f = self.tar.extractfile(filename)
        if f:
            return f.read().decode(encoding)
        return None

    def close(self):
        self.tar.close()
        return self

    def __iter__(self):
        return iter(self.tar.getmembers())

    @property
    def buffer(self):
        return self.file.getvalue()

Основная проблема:

def get_archive(self, path):
"""Get a file or directory from the container and make it into
    an `Archive` object."""
    if self.working_dir is not None and not posixpath.isabs(path):
        path = posixpath.join(self.working_dir, path)

    strm, stat = self.client.get_archive(
        self.container_id, path)

    return Archive('r', strm.read())

Может кто-нибудь сказать мне, как прочитать или преобразовать strm, который является потоком необработанных данных tar, в байтовоподобный объект, подходящий для класса Archive? или какие-то другие идеи?

1 Ответ

0 голосов
/ 02 декабря 2019

Проблема исправлена ​​при запуске в новой виртуальной среде Python и переустановке всех необходимых пакетов. Однако я до сих пор не понимаю, как это работает.

...