windows上的python zipfile模块,斜杠太多

windows上的python zipfile模块,斜杠太多,python,windows,zip,pygame,Python,Windows,Zip,Pygame,我目前正在使用Python2.7和PyGame1.9制作一个游戏。我将图形存储在graphics.dat中,它只是一个重命名的zip文件。我用于将图形加载到游戏中的功能如下: import pygame, zipfile, tarfile sys, os from cStringIO import StringIO from pygame.locals import * def loadImage(filename, noAlpha=False): baseZip = zipfile.Z

我目前正在使用Python2.7和PyGame1.9制作一个游戏。我将图形存储在
graphics.dat
中,它只是一个重命名的zip文件。我用于将图形加载到游戏中的功能如下:

import pygame, zipfile, tarfile sys, os
from cStringIO import StringIO
from pygame.locals import *
def loadImage(filename, noAlpha=False):
    baseZip = zipfile.ZipFile(os.path.join("..", "Data", "graphics.dat"))
    imgData = baseZip.read(filename) #the "filename" argument is already os.path.join()'ed when I pass it to the function
    imgDataIO = StringIO(imgData)
    finalFileName = os.path.split(filename)
    preSurf = pygame.image.load(imgDataIO, finalFileName[1])
    if noAlpha:
        resultSurf = preSurf.convert()
    else:
        resultSurf = preSurf.convert_alpha()
    baseZip.close()
    return resultSurf
在linux(Ubuntu12.04)上它工作得很好,但在windows上它总是会出错

“存档中没有名为folder\file.png的项目”

(我现在不在Windows上,因此无法复制准确的错误文本,但它有很多“\”字符)


有解决方案吗?

我认为您需要将文件名与“\”分开,并且只使用其中的image.png,而不是folder\image.png。试着让我们知道它是否有效。我猜这是因为我不知道zip文件的内容以及您当前的工作目录。问题是zip文件中的文件名总是用前斜杠存储,而不是反斜杠


因此,在加载图像时,您必须使用带有正斜杠的路径作为路径分隔符,例如“folder/image.png”。

如果您使用os.path.join,它应该会找到它。。。假设您使用的是正确的路径,您在哪一行获得错误?另外,请打印finalFileName的值。要从windows复制错误文本,请在命令行中使用重定向操作符
,并将输出重定向到一个文件finalFileName变量只是一个可选提示,用于告诉pygame图像是png类型,在导入中没有实际用途在第7行中您遇到了错误。在尝试加载图像之前,我放置了一个“打印文件名”,它会正确打印“folder\image.png”,但当我使用read()函数时,它会返回“KeyError:存档中没有名为“folder\\\\image.png”的项