我想从旧网站导入一些图标.这些图标的大小小于10kb.因此,当我尝试将图标导入其返回的stringio.txt文件时.
require "open-uri"
class Category < ActiveRecord::Base
has_attached_file :icon, :path => ":rails_root/public/:attachment/:id/:style/:basename.:extension"
def icon_from_url(url)
self.icon = open(url)
end
end
Run Code Online (Sandbox Code Playgroud)
在rake任务中.
category = Category.new
category.icon_from_url "https://xyz.com/images/dog.png"
category.save
Run Code Online (Sandbox Code Playgroud) 这样可以更好地理解事物.这不是我需要解决的实际问题.一个cstringIO对象应该模拟一个字符串,文件以及一行上的迭代器.它是否也模拟缓冲区?在任何情况下,理想情况下,应该能够构建如下的numpy数组
import numpy as np
import cstringIO
c = cStringIO.StringIO('\x01\x00\x00\x00\x01\x00\x00\x00')
#Trying the iterartor abstraction
b = np.fromiter(c,int)
# The above fails with: ValueError: setting an array element with a sequence.
#Trying the file abstraction
b = np.fromfile(c,int)
# The above fails with: IOError: first argument must be an open file
#Trying the sequence abstraction
b = np.array(c, int)
# The above fails with: TypeError: long() argument must be a string or a number
#Trying the string abstraction
b …Run Code Online (Sandbox Code Playgroud) filterous被使用 iterparse来解析简单的XML StringIO对象中一个单元测试.但是,在尝试访问该StringIO对象之后,Python将以" ValueError: I/O operation on closed file"消息退出.根据iterparse文档,"从lxml 2.3开始,.close()方法也将在错误情况下被调用,"但我没有收到任何错误消息或Exception来自iterparse.我的IO-foo显然没有达到速度,所以有人有建议吗?
命令和(希望)相关代码:
$ python2.6 setup.py test
Run Code Online (Sandbox Code Playgroud)
setup.py:
from setuptools import setup
from filterous import filterous as package
setup(
...
test_suite = 'tests.tests',
Run Code Online (Sandbox Code Playgroud)
测试/ tests.py:
from cStringIO import StringIO
import unittest
from filterous import filterous
XML = '''<posts tag="" total="3" ...'''
class TestSearch(unittest.TestCase):
def setUp(self):
self.xml = StringIO(XML)
self.result = StringIO()
...
def test_empty_tag_not(self):
"""Empty …Run Code Online (Sandbox Code Playgroud) 我正在尝试解码 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) 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不会被打印为新行。
我如何获得换行符?
我正在使用'pdf-reader'gem来阅读pdf文档的原始内容,以便我可以将它们发布(http-post)到API.要确认API实现可以从原始内容创建有效的pdf文档,我写了一个小小的要点来验证我的代码以阅读pdf内容.
出于某种原因,我总是得到'PDF不包含EOF标记(PDF :: Reader :: MalformedPDFError)'.
谁能指出我哪里出错了?
我该如何清除StringIO实例?在我写入并读取字符串io后,我想清除它.
require "stringio"
io = StringIO.new
io.write("foo")
io.string #=> "foo"
# ... After doing something ...
io.string #=> Expecting ""
Run Code Online (Sandbox Code Playgroud)
我试过flush和rewind,但我仍然得到同样的内容.
我想通过FTP上传文本字符串作为文件。
import ftplib
from io import StringIO
file = StringIO()
file.write("aaa")
file.seek(0)
with ftplib.FTP() as ftp:
ftp.connect("192.168.1.104", 2121)
ftp.login("ftp", "ftp123")
ftp.storbinary("STOR 123.txt", file)
Run Code Online (Sandbox Code Playgroud)
此代码返回错误:
TypeError: 'str' does not support the buffer interface
Run Code Online (Sandbox Code Playgroud) 我需要在内存中生成像数据一样的csv文件,然后将其编码为base64,这样我就可以保存它.所以基本上我不想为此在硬盘中创建文件.现在我通过创建csv文件然后编码其数据,保存它然后只是删除csv文件(因为它不再需要)来解决这个问题.但有没有办法跳过文件创建,但以同样的方式保存数据?我的意思是数据将用于使用base64再次打开csv文件.
import base64
import csv
from StringIO import StringIO
import os
def test_binary(self):
mylist = [['a', 'b'], ['c', 'd']]
with open("test.csv", "wb") as f:
writer = csv.writer(f)
writer.writerows(mylist)
myfile = open('test.csv', 'r')
stream = StringIO(myfile.read())
encoded = base64.b64encode(stream.getvalue())
self.test = encoded
myfile.close()
os.remove('test.csv')
Run Code Online (Sandbox Code Playgroud) StringIO 是我们在从文本中读取Pandas数据帧时使用的类似文件的字符串缓冲区对象,例如“如何从字符串创建 Pandas数据帧?”
我们应该将这两个导入中的哪一个用于 StringIO(在熊猫中)?这是一个长期存在的问题,四年来从未得到解决。
StringIO.StringIO(Python 2)/ io.StringIO(Python 3)
pandas.compat.StringIO
builtins, StringIO/cStringIO, BytesIO, cPickle, httplib、范围、过滤器、映射和 zip 的迭代器版本,以及 Python 3 兼容性的其他必要元素 - 请参阅0.13.0 最新消息用于从标准(来自 EmilH)导入的版本 2/3 分叉代码:
import sys
if sys.version_info[0] < 3:
from StringIO import StringIO
else:
from io import StringIO …Run Code Online (Sandbox Code Playgroud)