python-wind开发中问题_琐记2

用Python调用Wind接口,编写一个策略程序,小问题比较多,随手写下,防止以后忘记(查到好多高手写的文章,就不一一列出了,如有问题,请联系我,我删掉就行)

二、Python3.6下正常程序在Python2.7下运行结果不同

1、整除问题

获取数据中会显示进度,3.6下正常,0%..3%..6%,但在2.7下一直是0%..0%..0%,后来查了一下,和下面命令有关:

print2Text("{:.0%}".format(c/codeIndex)+"..")

c和codeIndex全是整数,2.7里整除后结果一直是零,要想达到3.6的效果,用下面的命令:

print2Text("{:.0%}".format(float(c)/codeIndex)+"..")

2、字符集问题

获取的数据写入到文件里,代码如下:

#写数据到txt
def write_txt(filename, data):
    bf1 = open(filename, 'w')
    for (c,d) in enumerate(data): #取出data中的每一个元组存到表格的每一行
        for (line,tmp) in enumerate(d):   #将每一个元组中的每一个单元存到每一列
            bf1.write(str(tmp)+"\t")
        bf1.write("\n")
    bf1.close()

3.6里正常,但2.7里执行红色代码的时候,到全汉字时,比如tmp=u"中国平安",就出错。

2.7字符集好像是通病,又是一顿查,红色代码出错的原因,是unicode与ascii之间转换的问题,所以遇到全汉字会出错,网上有一个办法是:

reload(sys)
sys.setdefaultencoding('utf-8')

但直接使用后,切换到3.6又报错,所以后来用以下办法:

try:
    reload(sys)
    sys.setdefaultencoding('utf-8')
    print("Python 2")
except:
    print("Python 3")

2用try,3用except,解决了一大半问题,还需要把write语句也改一下:

if isinstance(tmp,float):
    bf1.write(str(tmp)+"\t")
else:
    bf1.write(tmp+"\t")

这样就解决了写文件的问题。不过又引入了读文件的问题(悲了个剧)……

打开文件后,循环读取时就报错:

fid = open(fileName,'r')
for line in fid:

到红色代码就错,查了查,好像又是Unicode,又是Window下保存时加了BOM之类的,不想写了,直接写解决方法:

import codecs

然后用

fid = codecs.open(fileName,'r','utf-8')

不过这样写,python2.7、3.6里又不兼容了,最后用老办法:

try:
    fid = codecs.open(fileName,'r','utf-8')
    for line in fid:
        rowValues = line.split("\t")        
except:
    fid = open(fileName, 'r')
    for line in fid:
        rowValues = line.split("\t")
终于行了……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼他爸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值