0

Pyglet には、zip ファイルをロードできるクラスがあることがわかりました: http://www.pyglet.org/doc/api/pyglet.resource.ZIPLocation-class.html

私がそれを使用する方法があります:

myzip = zipfile.ZipFile('testzip.zip')
myzip = pyglet.resource.ZIPLocation(myzip, '')
myzip = myzip.open('test.png', mode='rb')

しかし、返されるのは<StringIO.StringIO instance at 0x41ec670>、pyglet.resource.image を使用する方法で使用できないためです。私は実際にそのファイルをプレーンテキストとして取得します。変換する方法はありますか?

4

2 に答える 2

0

わかりました、まだ実装されていないと思います。クラスが行う唯一のことは、StringIOでファイルのデータを返すことです。そして、純粋なzipfileでそれを行うのはさらに簡単です。これは私がそれをした方法です:

# That class is necessary, it's explained why in Loader's class comments
class Cleaner(dict):
   pass

class Loader:
    def __init__(self):
        self.sprite = pyglet.resource.image(self.unzip('test.png'))
        self.sprite = pyglet.resource.image(self.unzip('test2.png'))
    def unzip(self, file):
        zip = zipfile.ZipFile('test.zip')
        file = open('.buffer', 'wb')
        # without 'b' it wont work on windows
        file.write(zip.read(file))
        file.close()
        '''now the tricky part: pyglet save every file with weakref to
           dont load save thing more than once, it wouldnt let to load
           files from buffer so we need to block it somehow after each
           file reading i do that with empty dict class (dont need to import weakref)'''
        pyglet.resource._default_loader._cached_images = Cleaner()
        return 'data/.buffer'
于 2013-02-25T05:17:13.140 に答える
0

ZIP からファイルをロードする方法も調べてみました。

どうやら、ZIPLocation は主に、Pyglet で開いた ZIP を回避する方法を見つけるために使用されます。パスに追加することで、ZIP ファイルを開くことができます。

pyglet.resource.path.append("./spam.zip")
pyglet.resource.reindex()
data = pyglet.resource.file("spam.txt").read()#Imagine spam.txt is inside the zip.
于 2013-05-06T07:11:46.643 に答える