我的 python 3 涂鸦是这样的:
import io, sys
sys.stdout = io.StringIO()
# no more responses to python terminal funnily enough
Run Code Online (Sandbox Code Playgroud)
我的问题是如何重新连接,以便当我传入时1+1它会返回2到控制台?
这是在 Windows 7 64 位上运行的 32 位 python 上的 python 解释器中。
我有一个简单的任务:在 luigi 中,使用 dropbox-python sdk 将 Pandas 数据帧作为 csv 存储在 dropbox 中
通常(例如,使用 S3)您可以将 StringIO 用作类似文件的内存中对象。它也适用于熊猫df.to_csv()
不幸的是,dropbox sdk 需要二进制类型,我不知道如何将 StringIO 转换为二进制:
with io.StringIO() as f:
DF.to_csv(f, index=None)
self.client.files_upload(f, path=path, mode=wmode)
TypeError: expected request_binary as binary type, got <class '_io.StringIO'>
Run Code Online (Sandbox Code Playgroud)
ByteIO 不适用于df.to_csv()...
我的代码首先将行写入 CSV 中io.StringIO():
fileBuffer = io.StringIO()
# write header
header_writer = csv.DictWriter(fileBuffer, fieldnames=columnNames)
header_writer.writeheader()
# write lines
writer = csv.writer(fileBuffer, delimiter=',')
for line in data:
line_dec = line.decode('ISO-8859-1')
# print([line_dec])
writer.writerow([line_dec])
Run Code Online (Sandbox Code Playgroud)
以下代码还打印所有预期行:
$print(fileBuffer.getvalue()) # -> prints all expected rows
Run Code Online (Sandbox Code Playgroud)
我还可以使用 pysftp 成功连接到 SFTP 服务器,甚至在使用 pysftp 时,代码也成功返回所有预期行:
with pysftp.Connection(host, username=user, password=pw, cnopts=cnopts) as sftp:
print('sucessfully connected to {} via Port 22'.format(host))
print(fileBuffer.getvalue()) # -> prints all expected rows
sftp.putfo(fileBuffer, file2BeSavedAs) # -> no rows put on FTP Server
Run Code Online (Sandbox Code Playgroud)
实际问题来了: …
正如标题所说,Python cStringIO是否保护其内部结构以供多线程使用?
谢谢.
我搜索了文档并搜索过,但没有任何关于阻止StringIO对象的说法.
我可以创建自己的文件类对象,只是简单地包装StringIO但是如何阻止它?我知道的唯一方法是使用while循环和time.sleep(0.1)直到有可用的数据.
我们的团队必须如下所示:
这个:
buf = StringIO.StringIO()
gzip.GzipFile(fileobj=buf, mode='wb').write(foo)
...
Run Code Online (Sandbox Code Playgroud)
还有这个:
buf = StringIO.StringIO()
tmp = gzip.GzipFile(fileobj=buf, mode='wb')
tmp.write(foo)
...
Run Code Online (Sandbox Code Playgroud)
哪一个更pythonic?
编辑:我已经尝试/ catch来做错误处理工作,但哪一个更pythonic?
我正在研究铁轨上的红宝石.我正在尝试做文件附件(图像/音频/视频).
所以我有一个常见的方法
byteArray = StringIO.new(File.open("path").read)
Run Code Online (Sandbox Code Playgroud)
是否可以找到byteArray的内容类型来检查上传的文件是否是ruby中的image/audio/video/pdf.
为什么在下面的代码中我得到不同的编码?
>>> require 'stringio'
>>> a = StringIO.new('toto')
>>> a.read(2).encoding
=> #<Encoding:ASCII-8BIT>
>>> a.read.encoding
=> #<Encoding:UTF-8>
>>> a.read.encoding
=> #<Encoding:ASCII-8BIT>
Run Code Online (Sandbox Code Playgroud) 我试图遍历csv文件中的行。我从网站获取csv文件string。我知道如何创建csv.reader使用with时,数据存储在一个文件中。我不知道的是,如何在csv.reader不存储string到文件的情况下使用行。我正在使用Python 2.7.12。
我试图创建这样的StringIO对象:
from StringIO import StringIO
csv_data = "some_string\nfor_example"
with StringIO(csv_data) as input_file:
csv_reader = reader(csv_data, delimiter=",", quotechar='"')
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:
Traceback (most recent call last):
File "scraper.py", line 228, in <module>
with StringIO(csv_data) as input_file:
AttributeError: StringIO instance has no attribute '__exit__'
Run Code Online (Sandbox Code Playgroud)
我知道StringIO该类没有完成此对象的操作__exit__时会调用的方法when。
我的答案是如何正确执行此操作?我想可以StringIO通过子类化和添加__exit__方法来更改类,但是我怀疑有更简单的解决方案。
更新:
另外,我尝试了各种不同的组合:
with open(StringIO(csv_data)) as input_file:
with csv_data as input_file: …Run Code Online (Sandbox Code Playgroud) 我收到以下错误:
Second line.
Traceback (most recent call last):
File "./main.py", line 8, in <module>
print >>output, u'Second line.'
TypeError: unicode argument expected, got 'str'
Run Code Online (Sandbox Code Playgroud)
当我运行以下代码时。我不知道怎么了 有人可以教我如何解决它吗?
#!/usr/bin/env python
# vim: set noexpandtab tabstop=2 shiftwidth=2 softtabstop=-1 fileencoding=utf-8:
import io
output = io.StringIO()
output.write(u'First line.\n')
print u'Second line.'
print >>output, u'Second line.'
contents = output.getvalue()
print contents
output.close()
Run Code Online (Sandbox Code Playgroud)