案例法确实值得称赞,虽然是“笨办法”,一字不差,没有任何含糊,不过它确实有效,那么它就不笨。
因欲写个重命名的工具(其实之前有用shell写过),后来觉得代码相当ugly,想换个方式来实现它。尝试过perl, 无奈,熟悉正则表达式的我表示无力,太不人性了(也许我要被喷了,^_^),于是转向python,。之前有接触过,教材不对,学习方法不对,我还没入门就撤退了。现在我选择“笨办法”,也确实学到点东西了。
下面是参考另人的代码写的一个小工具,实现操作:连接oracle数据库,导出列,以某一列为原始文件名,另外一列为新文件名,批量重命名文件,并移动到目标路径。
网上查过,移动文件python的效率不高,我就改用了系统命令 move, 在传递参数时,也许会造成困扰,不过我之前刚好看过c语言传递参数(先用sprintf把命令及参数存到一个变量,然后那个变量作为参数传入system())我也照着去做,实现了参数传递,程序是相通的。
说明:@foo 其中,foo是实例名。
import sys
import os
from os.path import exists
import cx_Oracle
import py2exe
reload(sys)
sys.setdefaultencoding('utf-8')
def getdata(chah):
try:
conn = cx_Oracle.connect("system/foo@foo")
try:
cur = conn.cursor()
sql = """select yh,imgname from foo where
chah='%s' order by yh""" % chah
cur.execute(sql)
allData = cur.fetchall()
finally:
cur.close()
conn.close()
except Exception, e:
print '数据库错误:', e
return
for rec in allData:
oldname = "%s.jpg" %rec[0]
newname = rec[1]
if exists(oldname) and not exists(newname):
os.rename(oldname,newname)
print "%s => %s" %(oldname, newname)
else:
return 0
print "\nchah ?(quit: input q and hit ENTER)"
chah = raw_input(">")
while chah != 'q':
print "Running..."
getdata(chah)
target = "d:\%s" % chah
action = "move *.jpg %s" % target
os.system(action)
print "\nchah is %s" % chah
print "\nchah ?(quit: input q and hit ENTER)"
chah = raw_input(">")
关于连接oracle数据库,遇到一些问题,着实花了我不少时间,幸好网上都有答案,感谢国家,感谢党,感谢人民,感谢google.
不说遇到的问题,就说怎么做吧。
python版本 2.7
oracle 版本 9.2.0.4
先下载两个文件
1、cx_Oracle-5.1.2-10g.win32-py2.7.msi
2、instantclient-basic-win32-10.2.0.4.zip 这是从oracle官网下载的,坑人啊,33+M, 还非常难下载!幸好有离线服务器,再次感谢……
第一步,安装cx_Oracle-5.1.2-10g.win32-py2.7.msi
第二步,从instantclient-basic-win32-10.2.0.4.zip解压oraocci10.dll、oci.dll、oraociei10.dll放到C:\Python27\Lib\site-packages
第三步,设定环境变量我懒得去分析了,直接上配置
系统变量
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
ORACLE_HOME=D:\oracle\ora90
路径PATH
D:\oracle\ora90\bin;D:\oracle\ora90\Apache\Perl\5.00503\bin\mswin32-x86;C:\Program Files\Oracle\jre\1.1.8\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%JAVA_HOME%\bin;C:\Program Files\Vim\vim73;d:\php5;D:\bin;C:\Program Files\MySQL\MySQL Server 5.5\bin\;d:\php5;D:\php5\ext;d:\nginx;C:\Program Files\SMPlayer\mplayer;c:\mingw\bin;C:\Python27\Lib