标签: cstringio

python 3.4.0 email package install:ImportError:没有名为'cStringIO'的模块

我有一个virtualenv运行python 3.4.0点子版本是pip 1.5.4我做pip安装电子邮件并得到错误:ImportError:在进程结束时没有名为'cStringIO'的模块(失败)如何获取电子邮件用于python 3.4.0的包

stringio python-3.x cstringio

52
推荐指数
2
解决办法
7万
查看次数

混淆StringIO,cStringIO和ByteIO

我用google搜索并在SO上搜索这些缓冲模块之间的区别.但是,我仍然不太了解,我认为我读到的一些帖子已经过时了.

在Python 2.7.11中,我使用了下载了特定格式的二进制文件r = requests.get(url).然后我通过StringIO.StringIO(r.content),cStringIO.StringIO(r.content)io.BytesIO(r.content)设计用于解析内容的功能.

所有这三种方法都可用.我的意思是,即使文件是二进制文件,它仍然可以使用StringIO.为什么?

另一件事是他们的效率.

In [1]: import StringIO, cStringIO, io

In [2]: from numpy import random

In [3]: x = random.random(1000000)

In [4]: %timeit y = cStringIO.StringIO(x)
1000000 loops, best of 3: 736 ns per loop

In [5]: %timeit y = StringIO.StringIO(x)
1000 loops, best of 3: 283 µs per loop

In [6]: %timeit y = io.BytesIO(x)
1000 loops, best of 3: 1.26 ms per loop
Run Code Online (Sandbox Code Playgroud)

如上图所示 …

python bytesio stringio cstringio

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

pandas无法从大型StringIO对象中读取

我正在使用pandas来管理大量的8字节整数.这些整数作为空格分隔的元素包含在逗号分隔的CSV文件中,并且数组大小约为10000x10000.

Pandas能够快速读取前几列中逗号分隔的数据作为DataFrame,并且还可以轻松地将空格分隔的字符串存储在另一个DataFrame中.当我尝试将表从一列空格分隔的字符串转换为8位整数的DataFrame时,就会遇到麻烦.

我尝试过以下方法:

intdata = pd.DataFrame(strdata.columnname.str.split().tolist(), dtype='uint8')
Run Code Online (Sandbox Code Playgroud)

但内存使用情况令人难以忍受 - 价值10MB的整数消耗2GB内存.我被告知这是语言的限制,在这种情况下我无能为力.

作为一种可能的解决方法,我被建议将字符串数据保存为CSV文件,然后将CSV文件重新加载为以空格分隔的整数的DataFrame.这很好用,但为了避免写入磁盘的速度减慢,我尝试写一个StringIO对象.

这是一个最小的非工作示例:

import numpy as np
import pandas as pd
from cStringIO import StringIO

a = np.random.randint(0,256,(10000,10000)).astype('uint8')
b = pd.DataFrame(a)
c = StringIO()
b.to_csv(c, delimiter=' ', header=False, index=False)
d = pd.io.parsers.read_csv(c, delimiter=' ', header=None, dtype='uint8')
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误消息:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 443, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 228, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "/usr/lib64/python2.7/site-packages/pandas/io/parsers.py", line 533, …
Run Code Online (Sandbox Code Playgroud)

python csv stringio pandas cstringio

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

Python cStringIO在写入时比StringIO花费更多时间(字符串方法的性能)

在我的方式配置python中的字符串方法,以便我可以使用最快的方法.我有这个代码来测试文件中的字符串连接,StringIO,StringIO和普通字符串.

#!/usr/bin/env python
#title           : pythonTiming.py
#description     : Will be used to test timing function in python
#author          : myusuf
#date            : 19-11-2014
#version         : 0
#usage           :python pythonTiming.py
#notes           :
#python_version  :2.6.6  
#==============================================================================

import time
import cStringIO
import StringIO

class Timer(object):

    def __enter__(self):
        self.start = time.time()
        return self

    def __exit__(self, *args):
        self.end = time.time()
        self.interval = self.end - self.start

testbuf = """ Hello This is a General String that will be repreated
This string will be written to a …
Run Code Online (Sandbox Code Playgroud)

python string cstringio

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

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

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

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

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

python stringio cstringio

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

通过boto3将内存对象写入S3

我试图直接将文件写入S3而不创建本地文件然后上传.

我正在使用cStringIO在内存中生成一个文件,但是我无法找到在boto3中上传它的正确方法.

def writetos3(sourcedata, filename, folderpath):
     s3 = boto3.resource('s3')
     data = open(sourcedata, 'rb')
     s3.Bucket('bucketname').put_object(Key= folderpath + "/" + filename, Body=data)
Run Code Online (Sandbox Code Playgroud)

上面是我之前使用的本地文件的标准boto3方法,没有本地文件它不起作用,我得到以下错误:coercing to Unicode: need string or buffer, cStringIO.StringO found .

因为内存文件(我相信)已经被认为是开放的,我尝试将其更改为下面的代码,但它仍然无效,没有错误给出脚本只是挂在方法的最后一行.

def writetos3(sourcedata, filename, folderpath):
    s3 = boto3.resource('s3')
    s3.Bucket('bucketname').put_object(Key= folderpath + "/" + filename, Body=sourcedata)
Run Code Online (Sandbox Code Playgroud)

只是为了获得更多信息,我试图写的值看起来像这样

(cStringIO.StringO object at 0x045DC540)

有没有人知道我在做错了什么?

amazon-s3 cstringio boto3 python-3.6

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

tempfile.TemporaryFile与StringIO

我写了一个小基准,我比较了ZOCache的不同字符串连接方法.

所以它看起来像tempfile.TemporaryFile比其他任何东西都要快:

$ python src/ZOCache/tmp_benchmark.py 
3.00407409668e-05 TemporaryFile
0.385630846024 SpooledTemporaryFile
0.299962997437 BufferedRandom
0.0849719047546 io.StringIO
0.113346099854 concat
Run Code Online (Sandbox Code Playgroud)

我一直在使用的基准代码:

#!/usr/bin/python
from __future__ import print_function
import io
import timeit
import tempfile


class Error(Exception):
    pass


def bench_temporaryfile():
    with tempfile.TemporaryFile(bufsize=10*1024*1024) as out:
        for i in range(0, 100):
            out.write(b"Value = ")
            out.write(bytes(i))
            out.write(b" ")

        # Get string.
        out.seek(0)
        contents = out.read()
        out.close()
        # Test first letter.
        if contents[0:5] != b"Value":
            raise Error


def bench_spooledtemporaryfile():
    with tempfile.SpooledTemporaryFile(max_size=10*1024*1024) as out:
        for i in range(0, 100):
            out.write(b"Value = …
Run Code Online (Sandbox Code Playgroud)

python stringio cstringio

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

StringIO中的就地替换

如何在a内用另一个替换字符串StringIO?-我听说它们的长度相同是可能的。

尝试:

from cStringIO import StringIO

c = 'can\nhaz\nfoo'

sio = StringIO(c)

for line in sio:
    if line == 'haz\n':
        # sio.write('bar\n')
        line = 'bar\n'
        break

sio.seek(0)
sio.readlines()   # [ 'can\n', 'haz\n', 'bar' ]
Run Code Online (Sandbox Code Playgroud)

PS:目前正在使用C解决方案,但宁愿进行这项工作。

python stringio python-2.7 python-internals cstringio

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

真实文件对象比 StringIO 和 cStringIO 慢?

StringIO其代码中有以下注释:

Notes:
- Using a real file is often faster (but less convenient).
- There's also a much faster implementation in C, called cStringIO, but
  it's not subclassable.
Run Code Online (Sandbox Code Playgroud)

“真实文件通常更快”这句话对我来说真的很奇怪:写入磁盘怎么能胜过写入内存呢?我尝试分析这些不同的案例,得到的结果与这些文档以及这个问题的答案相矛盾。这个另一个问题确实解释了为什么 cStringIO 在某些情况下速度较慢,尽管我在这里没有进行任何连接。该测试将给定量的数据写入文件,然后查找开头并将其读回。在“新”测试中,我每次都创建一个新对象,而在“相同”测试中,我会截断并为每次重复重用相同的对象,以排除开销来源。对于使用数据量较小但数据量较大的临时文件来说,这种开销很重要。

代码在这里

Using 1000 passes with size 1.0KiB
New StringIO:   0.0026 0.0025 0.0034
Same StringIO:  0.0026 0.0023 0.0030
New cStringIO:  0.0009 0.0010 0.0008
Same cStringIO: 0.0009 0.0009 0.0009
New tempfile:   0.0679 0.0554 0.0542
Same tempfile:  0.0069 0.0064 0.0070
==============================================================
Using 1000 passes with …
Run Code Online (Sandbox Code Playgroud)

python performance temporary-files stringio cstringio

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

没有名为StringIO的模块

我有python 3.6.我想从另一个名为'run.py'的python文件中执行名为'operation.py'的python文件.

operation.py我做from cStringIO import StringIO.PyCharm向我显示警告,没有名为StringIO的模块.我知道,因为python3我必须从io导入StringIO模块.但是,当我使用此导入时,此模块的功能不再起作用.

虽然有一个警告from cStringIO import StringIO,代码仍然有效(我知道这个导入确实有效,因为我试图使它成为一个注释,它无法运行).问题是,当我尝试通过'run.py'文件运行此文件时,它无法运行并打印以下消息:ModuleNotFoundError: No module named 'cStringIO'.

我试图在PyCharm中使用这个未解决的参考问题,但它没有帮助.

为什么'operation.py'会运行警告,但'run.py'不会?我怎么解决这个问题?

operation.py:

    from cStringIO import StringIO


    str_io = StringIO()
    g = Generator(str_io, False)
    # There is a full code here...
Run Code Online (Sandbox Code Playgroud)

run.py:

    import operation


    def main():
        operation
Run Code Online (Sandbox Code Playgroud)

operation.py有一个警告,但运行良好,run.py有失败.

python stringio python-3.x cstringio

-1
推荐指数
2
解决办法
2万
查看次数