用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")终于行了……