博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python StringIo,Base64,上传文件
阅读量:4300 次
发布时间:2019-05-27

本文共 2018 字,大约阅读时间需要 6 分钟。

模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中。
此类中的大部分函数都与对文件的操作方法类似。

例:
1      #coding=gbk
2       
3      import StringIO, cStringIO, sys
4       
5      s = StringIO.StringIO("JGood is a handsome boy")
6      s.write("JGood is a handsome boy \r\n")
7      s.write('okkkk中国')
8      s.seek(0)
9      print s.read()
10       
11      #最后4个字节
12      s.seek(-4, 2)
13      print s.read()
14       
15      #---- 结果 ----
16      #JGood is a handsome boy 
17      #okkkk中国
18      #中国

 

通过例子,我们看到了StringIO的行为,基本与file一致。StringIO提供了一个方法,可以方便的获取其中的数据:StringIO. getvalue()。如果使用read方法获取其中的数据,必须通过seek先设置"文件指针"的位置。

Base64

Base64模块是用来作base64编码解码的。这种编码方式在电子邮件中是很常见的。

它可以把不能作为文本显示的二进制数据编码为可显示的文本信息。编码后的文本大小会增大1/3。
    闲话不说了,base64模块真正用的上的方法只有8个,分别是encode, decode, encodestring, decodestring, b64encode,b64decode, urlsafe_b64decode,urlsafe_b64encode。他们8个可以两两分为4组,encode,decode一组,专门用来编码和 解码文件的,也可以对StringIO里的数据做编解码;encodestring,decodestring一组,专门用来编码和解码字符串; b64encode和b64decode一组,用来编码和解码字符串,并且有一个替换符号字符的功能。这个功能是这样的:因为base64编码后的字符除 了英文字母和数字外还有三个字符 + / =, 其中=只是为了补全编码后的字符数为4的整数,而+和/在一些情况下需要被替换的,b64encode和b64decode正是提供了这样的功能。至于什 么情况下+和/需要被替换,最常见的就是对url进行base64编码的时候。urlsafe_b64encode和urlsafe_b64decode 一组,这个就是用来专门对url进行base64编解码的,实际上也是调用的前一组函数。
下面看看例子:

#
-*- encoding:gb2312 -*-
import
 base64
import
 StringIO
=
 
"
this is a test
"
=
 base64.encodestring(a) 
#
 对字符串编码
print
 b
print
 base64.decodestring(b) 
#
 对字符串解码
=
 StringIO.StringIO()
c.write(a)
=
 StringIO.StringIO()
=
 StringIO.StringIO()
c.seek(0)
base64.encode(c, d) 
#
 对StringIO内的数据进行编码
print
 d.getvalue()
d.seek(0)
base64.decode(d, e) 
#
 对StringIO内的数据进行解码
print
 e.getvalue()
=
 
"
this is a +test
"
=
 base64.urlsafe_b64encode(a) 
#
 进行url的字符串编码
print
 b
print
 base64.urlsafe_b64decode(b)

上面的encode函数和decode函数的参数其实还可以是文件对象的,那的象这样:

f1 
=
 open(
'
aaa.txt
'
'
r
'
)
f2 
=
 open(
'
bbb.txt
'
'
w
'
)
base64.encode(f1, f2)
f1.close()
f2.close()
上面的encode函数和decode函数的参数其实还可以是文件对象的,那的象这样:

结合使用(用于django中上传文件操作)

前端代码:
output = StringIO.StringIO()
base64.encode('filename', output)
api.XXXX(request, name='filename', stream=output.getvalue())
后台接收代码:
stream_decode = base64.b64decode(body['stream'])

转载地址:http://kxvws.baihongyu.com/

你可能感兴趣的文章
设计模式19_状态
查看>>
设计模式20_观察者
查看>>
vnpy学习10_常见坑
查看>>
vnpy学习10_常见坑02
查看>>
用时三个月,终于把所有的Python库全部整理了!拿去别客气!
查看>>
pd.stats.ols.MovingOLS以及替代
查看>>
vnpy学习11_增加测试评估指标
查看>>
资金流入流出计算方法
查看>>
海龟交易法则07_如何衡量风险
查看>>
海龟交易法则08_风险与资金管理
查看>>
海龟交易法则09_海龟式积木
查看>>
海龟交易法则10_通用积木
查看>>
海龟交易法则14_掌控心魔
查看>>
海龟交易法则15_万事俱备
查看>>
海龟交易法则16_附原版海龟交易法则
查看>>
克罗谈投资策略01_期货交易中的墨菲法则
查看>>
克罗谈投资策略02_赢家和输家
查看>>
克罗谈投资策略03_你所期望的赌博方式
查看>>
克罗谈投资策略04_感觉与现实
查看>>
通向财务自由之路01_导读
查看>>