标签: stringio

Python记录到StringIO处理程序

我有一个python测试,我想测试日志记录是否正常工作.例如,我有一个创建用户的函数,最后日志记录将响应写入日志文件.

logger = logging.getLogger('mylogger')
logger.setLevel(logging.DEBUG)
handler = logging.handlers.WatchedFileHandler('mylogfile.log')
formatter = logging.Formatter('%(asctime)s: %(message)s',
                              '%d/%b/%Y:%H:%M:%S %z')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info('Some log text')
Run Code Online (Sandbox Code Playgroud)

在我的测试用例中,我想将日志输出发送到StringIO.

class MyTest(unittest.TestCase):
    def setUp(self):
        stream = StringIO()
        self.handler = logging.StreamHandler(stream)
        log = logging.getLogger('mylogger')
        log.removeHandler(log.handlers[0])
        log.addHandler(self.handler)

    def tearDown(self):
        log = logging.getLogger('mylogger')
        log.removeHandler(self.handler)
        self.handler.close()
Run Code Online (Sandbox Code Playgroud)

问题是,我不确定我应该如何测试我的记录器是否正常工作.

python logging unit-testing stringio

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

Python,在内存中写入zip到文件

如何将内存zipfile写入文件?

# Create in memory zip and add files
zf = zipfile.ZipFile(StringIO.StringIO(), mode='w',compression=zipfile.ZIP_DEFLATED)
zf.writestr('file1.txt', "hi")
zf.writestr('file2.txt', "hi")

# Need to write it out
f = file("C:/path/my_zip.zip", "w")
f.write(zf)  # what to do here? Also tried f.write(zf.read())

f.close()
zf.close()
Run Code Online (Sandbox Code Playgroud)

python zip stringio

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

是否可以倒回python StringIO内存文件?

假设我有一个类似StringIO文件的对象,我只是从字符串创建的.我把它传递给一个需要文件的函数.此函数通过结尾读取整个文件.我现在想把它传递给另一个需要类文件对象的函数.我可以回放它以便从头开始阅读吗?如果没有,我可以采取哪些其他方法来实现最蟒蛇般的方法?

python stringio

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

Pycurl和io.StringIO - pycurl.error:(23,'写体失败)

我正在将ebay sdk移植到python3,我偶然发现了以下问题.

我正在使用pycurl发送一些HTTP请求.这是我配置它的方式:

    self._curl = pycurl.Curl()
    self._curl.setopt(pycurl.FOLLOWLOCATION, 1)
    self._curl.setopt(pycurl.URL, str(request_url))
    self._curl.setopt(pycurl.SSL_VERIFYPEER, 0)

    self._response_header = io.StringIO()
    self._response_body = io.StringIO()

    self._curl.setopt(pycurl.CONNECTTIMEOUT, self.timeout)
    self._curl.setopt(pycurl.TIMEOUT, self.timeout)

    self._curl.setopt(pycurl.HEADERFUNCTION, self._response_header.write)
    self._curl.setopt(pycurl.WRITEFUNCTION, self._response_body.write)
Run Code Online (Sandbox Code Playgroud)

当我调用self._curl.perform()时,我收到以下错误:

pycurl.error: (23, 'Failed writing body (1457 != 1460)')
Run Code Online (Sandbox Code Playgroud)

据我所知,这意味着写函数存在问题,但我无法弄清楚究竟是什么.可能与从StringIO模块迁移到io有关,但我不确定.

UPD:我尝试过以下方法:

    def body(buf):
        self._response_body.write(buf)

    def header(buf):
        self._response_header.write(buf)

    self._curl.setopt(pycurl.HEADERFUNCTION, header)
    self._curl.setopt(pycurl.WRITEFUNCTION, body)
Run Code Online (Sandbox Code Playgroud)

它的工作原理.我试图用lambdas做同样的技巧(而不是定义那些笨拙的功能,但它没有用.

python curl pycurl stringio python-3.x

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

.rewind方法对ruby中的Tempfile有什么作用?

我已经通过看这些文档和谷歌,似乎无法找到的目的.rewind,以及它如何从不同.close,在工作的环境Tempfile.

另外,为什么.read在倒带之前返回一个空字符串?

这是一个例子:

file = Tempfile.new('foo')
file.path      # => A unique filename in the OS's temp directory,
               #    e.g.: "/tmp/foo.24722.0"
               #    This filename contains 'foo' in its basename.
file.write("hello world")
file.rewind
file.read      # => "hello world"
file.close
file.unlink    # deletes the temp file
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails stringio

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

如何将Python StringIO()对象传递给ZipFile(),还是不受支持?

所以我有一个StringIO()类似文件的对象,我正在尝试将其写入a ZipFile(),但是我得到了这个TypeError:

coercing to Unicode: need string or buffer, cStringIO.StringI found
Run Code Online (Sandbox Code Playgroud)

以下是我正在使用的代码示例:

file_like = StringIO()
archive = zipfile.ZipFile(file_like, 'w', zipfile.ZIP_DEFLATED)

# my_file is a StringIO object returned by a remote file storage server.
archive.write(my_file)
Run Code Online (Sandbox Code Playgroud)

文档说这StringIO()是一个类文件类,ZipFile()可以接受类文件对象.有什么我想念的吗?任何帮助将不胜感激.

提前致谢!

python zipfile stringio

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

使用Pandas Excelwriter写入StringIO对象?

我可以将StringIO对象传递给pd.to_csv()就好了:

io = StringIO.StringIO()
pd.DataFrame().to_csv(io)
Run Code Online (Sandbox Code Playgroud)

但是当使用excel编写器时,我遇到了很多麻烦.

io = StringIO.StringIO()
writer = pd.ExcelWriter(io)
pd.DataFrame().to_excel(writer,"sheet name")
writer.save()   
Run Code Online (Sandbox Code Playgroud)

返回一个

AttributeError: StringIO instance has no attribute 'rfind'
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个ExcelWriter没有调用的对象pd.ExcelWriter()但是遇到了一些麻烦.这是我到目前为止所尝试的:

from xlsxwriter.workbook import Workbook
writer = Workbook(io)
pd.DataFrame().to_excel(writer,"sheet name")
writer.save()
Run Code Online (Sandbox Code Playgroud)

但现在我得到了一个 AttributeError: 'Workbook' object has no attribute 'write_cells'

如何将excel格式的pandas数据帧保存到StringIO对象?

python excel stringio pandas xlsxwriter

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

如何循环直到Python中的EOF?

我需要循环,直到我到达类似文件的对象的末尾,但我没有找到"明显的方法去做",这让我怀疑我忽略了一些东西,很明显.:-)

我有一个流(在这种情况下,它是一个StringIO对象,但我也对一般情况感到好奇)以"<length> <data>"格式存储未知数量的记录,例如:

data = StringIO("\x07\x00\x00\x00foobar\x00\x04\x00\x00\x00baz\x00")
Run Code Online (Sandbox Code Playgroud)

现在,我能想象的唯一清晰的方法就是使用(我认为是)一个初始化的循环,这看起来有点像非Pythonic:

len_name = data.read(4)

while len_name != "":
    len_name = struct.unpack("<I", len_name)[0]
    names.append(data.read(len_name))

    len_name = data.read(4)
Run Code Online (Sandbox Code Playgroud)

在一个类似C语言,我只是坚持的read(4)while的测试条款,但当然不会对Python的工作.有没有想过更好的方法来实现这个目标?

python eof stringio

10
推荐指数
3
解决办法
6万
查看次数

使用io.StringIO模拟文件时出现Unicode问题

我正在使用一个io.StringIO对象来模拟一个类的单元测试中的文件.问题是这个类似乎希望默认情况下所有字符串都是unicode,但内置str函数不会返回unicode字符串:

>>> buffer = io.StringIO()
>>> buffer.write(str((1, 2)))
TypeError: can't write str to text stream
Run Code Online (Sandbox Code Playgroud)

>>> buffer.write(str((1, 2)) + u"")
6
Run Code Online (Sandbox Code Playgroud)

作品.我假设这是因为与unicode字符串的串联也会使结果成为unicode.这个问题有更优雅的解决方案吗?

python unicode stringio

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

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
查看次数