先前一直用Java开发,所以也积累了很多自己写的小工具,但此次遇到从大量tar.gz包里批量提取文件的工作,java运行起来效率很低,据SA说python做相关操作会快很多,比操作系统本身的命令都快,所以尝试着用下。
第一步,Hello World
查了下网上对Python的介绍,决定还是先用Python2,可能用的人多用得久,遇到问题也容易搜到,反正我就算遇到问题也都是些通用的问题吧。
下了Python2.7.6,官网下的msi,默认安装完成后,手工加了下环境变量,把c:\python27加到Path里
用文本编辑器些了个HelloWorld,保存成py文件,然后命令行运行python hello.py,成功!
第二步,解压tar
import tarfile,os
os.chdir("C:\\2013")
tar = tarfile.open("XXX.tar.gz")
for member in tar.getmembers():
print "%s" %(member.name)
tar.close()
运行OK,打出了每个tarInfo的文件名,其他压缩文件的处理可见
https://docs.python.org/2/library/tarfile.html
第三步,连接Oracle
按照网上说的到 http://cx-oracle.sourceforge.net/ 下了个安装包,安装好后在IDLE里敲了
>>> import cx_Oracle
结果报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: DLL load failed: 找不到指定的程序。
查到这篇blog
http://blog.youkuaiyun.com/huzhenwei/article/details/3946308
百度了下instantclient-basic-win32,就把里面的oci.dll单独copy到C:\Python27\Lib\site-packages
再试了下,OK
之前单独下了个oci.dll不管用,还试了下了oraociei11.dll和oraocci11.dll,100多M,也不管用,还是下Oracle的instantclient靠谱,官网上还找不着,直接百度下的。
至此,基本的问题都解决了,下面开始写小工具了
-------------------------------------------
好吧,把oci.dll放到site-packages目录下是不行的,写了个select,报错Unable to acquire Oracle environment handle
。。。。。。。
还是把instantclient-basic-win32全解压到一个目录,然后在环境变量的Path里将此目录放在最前(必须比Oracle的目录靠前)
再跑,报错ORA-12705: Cannot access NLS data files or invalid
查了下说是字符集不匹配的关系,
把注册表里\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 本级和下级目录下的NLS_lang 的NA值修改为SIMPLIFIED CHINESE_CHINA.ZHS16GBK;
OK,可以select了