标签: stringio

用于创建内存中zip文件并作为http响应返回的函数

我避免在磁盘上创建文件,这是我到目前为止所得到的:

def get_zip(request):
    import zipfile, StringIO
    i = open('picture.jpg', 'rb').read()
    o = StringIO.StringIO()
    zf = zipfile.ZipFile(o, mode='w')
    zf.writestr('picture.jpg', i)
    zf.close()
    o.seek(0)
    response = HttpResponse(o.read())
    o.close()
    response['Content-Type'] = 'application/octet-stream'
    response['Content-Disposition'] = "attachment; filename=\"picture.zip\""
    return response
Run Code Online (Sandbox Code Playgroud)

你认为是正确的 - 优雅 - pythonic足够吗?有更好的方法吗?

谢谢!

python zip stringio

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

python3中的io.StringIO编码

我似乎无法找到io.StringIOPython3中的默认编码.这是区域设置stdio吗?

我该怎么改变它?

有了stdio,似乎只是重新打开正确的编码工作,但没有重新打开的事情StringIO.

encoding utf-8 stringio python-3.x

6
推荐指数
2
解决办法
8845
查看次数

为什么StringIO对象比实际文件对象慢?

我正在查看StringIO它所说的内容的来源:

  1. 使用真实文件通常更快(但不太方便).
  2. 在C中也有一个更快的实现,称为cStringIO,但它不是可子类化的.

StringIO 就像一个内存文件对象,为什么它比真正的文件对象慢?

python stringio cstringio

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

如何修复“ ImportError:无法导入名称'StringIO'”

python版本是3.6.6,而pandas_datareader版本是0.7.0

当我导入pandas_datareader时,发生如下错误。

C:\PycharmProjects\Demo\venv\Scripts\python.exe C:/PycharmProjects/Demo/stock.py
Traceback (most recent call last):
  File "C:/PycharmProjects/Demo/stock.py", line 3, in <module>
    import pandas_datareader as wb
  File "C:\PycharmProjects\Demo\venv\lib\site-packages\pandas_datareader\__init__.py", line 2, in <module>
    from .data import (DataReader, Options, get_components_yahoo,
  File "C:\PycharmProjects\Demo\venv\lib\site-packages\pandas_datareader\data.py", line 7, in <module>
    from pandas_datareader.av.forex import AVForexReader
  File "C:\PycharmProjects\Demo\venv\lib\site-packages\pandas_datareader\av\__init__.py", line 3, in <module>
    from pandas_datareader.base import _BaseReader
  File "C:\PycharmProjects\Demo\venv\lib\site-packages\pandas_datareader\base.py", line 11, in <module>
    from pandas.compat import StringIO, bytes_to_str
ImportError: cannot import name 'StringIO'
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

python stringio pandas-datareader

6
推荐指数
2
解决办法
3456
查看次数

如何在Python3中将UTF-8 CSV写入BytesIO?

首先,我了解如何在 Python3 中从字符串编写 UTF-8,并且StringIO推荐用于此类字符串构建。但是,我特别需要一个类似二进制文件的对象,为此我需要BytesIO. 如果我执行以下操作,那么数据最终会崩溃,因为它被读取为Latin1,我的计算机的默认区域设置/字符集。

with io.StringIO() as sb:
    csv.writer(sb).writerows(rows)
    sb.flush()
    sb.seek(0)
    # blows up with Latin1 encoding error
    job = bq.load_table_from_file(sb, table_ref, job_config=job_config)
Run Code Online (Sandbox Code Playgroud)

所以我的解决方法是这个怪物,使内存使用量加倍:

with io.StringIO() as sb:
    csv.writer(sb).writerows(rows)
    sb.flush()
    sb.seek(0)
    with io.BytesIO(sb.getvalue().encode('utf-8')) as buffer:
        job = bq.load_table_from_file(buffer, table_ref, job_config=job_config)
Run Code Online (Sandbox Code Playgroud)

在此链中的某个位置必须有一种方法来指定字节编码,以便类似文件的读者sb将看到 UTF-8 格式的数据。或者有没有办法使用csv.writer()字节流?

我在 StackOverflow 上寻找了这两个答案,但我发现的通常是写入文件和内存中所有内容都指向的内容StringIO。

stringio python-3.x

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

在 ReportLab 生成的 PDF 中包含 base64 编码的图像

我正在尝试解码 base64 编码的图像并将其放入我使用 ReportLab 生成的 PDF 中。我目前是这样做的(image_data是 base64 编码的图像,story已经是 ReportLab 的故事):

# There is some "story" I append every element
img_height = 1.5 * inch  # max image height
img_file = tempfile.NamedTemporaryFile(mode='wb', suffix='.png')
img_file.seek(0)
img_file.write(image_data.decode('base64'))
img_file.seek(0)
img_size = ImageReader(img_file.name).getSize()
img_ratio = img_size[0] / float(img_size[1])
img = Image(img_file.name,
    width=img_ratio * img_height,
    height=img_height,
)
story.append(img)
Run Code Online (Sandbox Code Playgroud)

它有效(尽管对我来说仍然很难看)。我想摆脱临时文件(文件类对象不应该起作用吗?)。

为了摆脱临时文件,我尝试使用StringIO模块,创建类文件对象并传递它而不是文件名:

# There is some "story" I append every element
img_height = 1.5 * inch  # max image height
img_file …
Run Code Online (Sandbox Code Playgroud)

python django reportlab temporary-files stringio

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

如何在Python中使用StringIO放置新行?

import StringIO
output = StringIO.StringIO()   
output.write('this is the first line\n the new line should come here')
a = output.getvalue()
output.close()
print a 
Run Code Online (Sandbox Code Playgroud)

但是新行字符\n不会被打印为新行。

我如何获得换行符?

python stringio

5
推荐指数
0
解决办法
2073
查看次数

PDF不包含带有pdf-reader的EOF标记(PDF :: Reader :: MalformedPDFError)

我正在使用'pdf-reader'gem来阅读pdf文档的原始内容,以便我可以将它们发布(http-post)到API.要确认API实现可以从原始内容创建有效的pdf文档,我写了一个小小的要点来验证我的代码以阅读pdf内容.

出于某种原因,我总是得到'PDF不包含EOF标记(PDF :: Reader :: MalformedPDFError)'.

谁能指出我哪里出错了?

ruby pdf gem pdf-reader stringio

5
推荐指数
0
解决办法
950
查看次数

将 ZipFile 从 URL 读取到 StringIO 中并使用 panda.read_csv 进行解析

ZipFile我正在尝试从 URL读取数据并通过使用解析 as csvStringIO内的数据ZipFilepandas.read_csv

r = req.get("http://seanlahman.com/files/database/lahman-csv_2014-02-14.zip").content
file = ZipFile(StringIO(r))
salaries_csv = file.open("Salaries.csv")
salaries = pd.read_csv(salaries_csv)
Run Code Online (Sandbox Code Playgroud)

最后一行给了我一个错误:

CParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试使用

salaries = pd.read_csv(file.open("Salaries.csv"))
Run Code Online (Sandbox Code Playgroud)

有用。

所以我想知道我在这里错过了什么。

file.open应该返回一个ZipExtFile对象,并且由于 read_csv 仅接受字符串或文件句柄/StringIO输入,为什么最后一行可以工作?

python stringio pandas python-zipfile

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

tempfile模块和IO文件类对象有什么区别

io.BytesIO()我发现这两个模块在使用or创建临时文件方面有很多相似之处,io.StringIo()每个tempfile.TemporaryFile() 模块的用途是什么?

temporary-files bytesio stringio python-3.x

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