相关疑难解决方法(0)

Python中的二进制缓冲区

在Python中,您可以将StringIO用于字符数据的类文件缓冲区.内存映射文件基本上对二进制数据做类似的事情,但它需要一个用作基础的文件.Python是否有一个用于二进制数据的文件对象,并且只是内存,相当于Java的ByteArrayOutputStream

我的用例是我想在内存中创建一个ZIP文件,ZipFile需要一个类似文件的对象.

python io binary buffer

57
推荐指数
2
解决办法
5万
查看次数

使用python将文件夹添加到zip文件

我想创建一个zip文件.将文件夹添加到zip文件,然后将一堆文件添加到该文件夹​​.

所以我想最终得到一个带有文件的单个文件夹的zip文件.

我不知道在zip文件中有文件夹或谷歌的东西是不是很糟糕的做法.

我从这开始:

def addFolderToZip(myZipFile,folder):
    folder = folder.encode('ascii') #convert path to ascii for ZipFile Method
    for file in glob.glob(folder+"/*"):
            if os.path.isfile(file):
                print file
                myZipFile.write(file, os.path.basename(file), zipfile.ZIP_DEFLATED)
            elif os.path.isdir(file):
                addFolderToZip(myZipFile,file)

def createZipFile(filename,files,folders):
    curTime=strftime("__%Y_%m_%d", time.localtime())
    filename=filename+curTime;
    print filename
    zipFilename=utils.getFileName("files", filename+".zip")
    myZipFile = zipfile.ZipFile( zipFilename, "w" ) # Open the zip file for writing 
    for file in files:
        file = file.encode('ascii') #convert path to ascii for ZipFile Method
        if os.path.isfile(file):
            (filepath, filename) = os.path.split(file)
            myZipFile.write( file, filename, zipfile.ZIP_DEFLATED )

    for folder in …
Run Code Online (Sandbox Code Playgroud)

python directory zip file zipfile

45
推荐指数
5
解决办法
7万
查看次数

将 zip fileobj 上传到 S3 - KeyError:存档中没有名为 8388608 的项目

我正在尝试制作一个内存中的 zip 文件,其中包含一堆 JSON 文件。我正在努力将它作为文件对象上传到 S3,收到一个相当奇怪的错误。这是我的代码:

import boto3
import zipfile
import json
import os

session = boto3.session.Session(
        aws_access_key_id=os.environ.get('AWS_ACCESS_KEY_ID'),
        aws_secret_access_key=os.environ.get('AWS_SECRET_ACCESS_KEY'))
client = session.client('s3')

data = {'test1.json': {'a': 1, 'b': 2},
        'test2.json': {'x': 3, 'y': 4}}

zip_buffer = BytesIO()
zf = zipfile.ZipFile(zip_buffer, 'w')
for filename, d in data.iteritems():
    zf.writestr(filename, json.dumps(d, indent=4))

client.upload_fileobj(zf, os.environ.get('S3_BUCKET'), 'test_zip.zip')
Run Code Online (Sandbox Code Playgroud)

这给了我:

KeyError: 'There is no item named 8388608 in the archive'
Run Code Online (Sandbox Code Playgroud)

这是如何以及为什么发生的?当然8388608,档案中没有项目——我没有把它放在那里。


编辑

如果我将文件保存在本地而不是内存中,然后重新打开它,它工作正常。我应该使用tempfile吗?

python amazon-s3 zipfile boto3

1
推荐指数
1
解决办法
1773
查看次数

标签 统计

python ×3

zipfile ×2

amazon-s3 ×1

binary ×1

boto3 ×1

buffer ×1

directory ×1

file ×1

io ×1

zip ×1