Python 3.x 在python中从zip加载音频文件时出错
我正在制作一个游戏,需要从.zip文件加载一些受密码保护的音频文件,但我遇到以下错误:Python 3.x 在python中从zip加载音频文件时出错,python-3.x,pygame,zip,python-3.6,zipfile,Python 3.x,Pygame,Zip,Python 3.6,Zipfile,我正在制作一个游戏,需要从.zip文件加载一些受密码保护的音频文件,但我遇到以下错误: io.UnsupportedOperation: seek io.UnsupportedOperation: seek io.UnsupportedOperation: seek b'hey you did it!' #THIS IS FROM THE PROGRAM Traceback (most recent call last): File "C:\Python36\lib\zipfile.py",
io.UnsupportedOperation: seek
io.UnsupportedOperation: seek
io.UnsupportedOperation: seek
b'hey you did it!' #THIS IS FROM THE PROGRAM
Traceback (most recent call last):
File "C:\Python36\lib\zipfile.py", line 849, in read
data = self._read1(n)
File "C:\Python36\lib\zipfile.py", line 917, in _read1
data += self._read2(n - len(data))
File "C:\Python36\lib\zipfile.py", line 949, in _read2
data = self._fileobj.read(n)
File "C:\Python36\lib\zipfile.py", line 705, in read
self._file.seek(self._pos)
AttributeError: 'NoneType' object has no attribute 'seek'
下面是我的代码:
from zipfile import ZipFile
from PIL import Image
from io import BytesIO
import pygame
from pygame.locals import *
import pyganim
import sys
pygame.init()
root = pygame.display.set_mode((320, 240), 0, 32)
pygame.display.set_caption('image load test')
#THIS IS HOW TO LOAD IMAGES (WORKS)
with ZipFile("spam.zip", 'r') as archive:
mcimg = archive.read('a.png', pwd=b'onlyforthedev')
mc = pygame.image.load(BytesIO(mcimg))
anime = pyganim.PygAnimation([(mc, 100),
(mc, 100)])
anime.play()
#THIS IS HOW TO LOAD MUSIC (DOES NOT WORK)
with ZipFile('spam.zip') as zippie:
with zippie.open('zora.mp3', pwd=b'onlyforthedev') as zora:
pygame.mixer.music.load(zora)
pygame.mixer.music.play(-1)
#THIS IS HOW TO LOAD TEXT (WORKS)
with ZipFile('spam.zip') as myzip:
with myzip.open('eggs.txt', pwd=b'onlyforthedev') as myfile:
print(myfile.read())
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
root.fill((100, 50, 50))
anime.blit(root, (100, 50))
pygame.display.update()
如何加载声音文件而不引发此类错误?什么是“seek”?我在Python3.6上也遇到了这个错误 我猜
pygame.mixer.music.load
会调用zippie
上的seek
方法,这是一个
从python 3.7ZipExtFile
中,对象现在有了一个seek方法。我认为,如果您升级到python 3.7.2或更高版本,那么您的错误应该会消失。尝试替换
pygame.mixer.music.load(zora)
与
这对我在Python3.6上使用h5py.File()
我猜这与
pygame..load()
的问题是一样的
编辑:
我现在意识到,当您加载图像时,上述解决方案已经存在于您的代码中:
with ZipFile("spam.zip", 'r') as archive:
mcimg = archive.read('a.png', pwd=b'onlyforthedev')
mc = pygame.image.load(BytesIO(mcimg))
因此,为了实现一致性,您可以通过类似的方式加载音乐
:
with ZipFile('spam.zip') as zippie:
zora = zippie.read('zora.mp3', pwd=b'onlyforthedev')
pygame.mixer.music.load(BytesIO(zora))
with ZipFile('spam.zip') as zippie:
zora = zippie.read('zora.mp3', pwd=b'onlyforthedev')
pygame.mixer.music.load(BytesIO(zora))