python操作文件入库

这是我写的一个pyhon操作文件入进数据库的程序,由于功底还不扎实!所以写得很粗糙!

下面代码是一个公共的输出类,所有的输出语句通过下面程序来展示:

 1 #!/user/bin/env python
 2 #coding:utf-8
 3
 4
 5 try:
 6     import time
 7 except Exception, e:
 8     raise e
 9
10
11 def msgOutput( content, codeZT, codeType = "UTF-8" ):
12     if codeZT == 1:
13         return "[Msg-Prompt][%s] %s" % ( time.strftime("%Y/%m/%d-%X",time.localtime()), content )
14     else:
15         return "\033[1;31m[Msg-Error ][%s] %s\033[0m" % ( time.strftime("%Y/%m/%d-%X",time.localtime()), content)

下面是数据库类,暂时还不完善

 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3
 4 """
 5 oracle链接类
 6 """
 7 import sys
 8 sys.path.append( "这里是上面输出类的路径" )   #msgOutput.py的路径
 9 from msgOutput import msgOutput
10 import cx_Oracle,time
11
12
13 #***************************************************************************************************
14 #数据库类
15 #***************************************************************************************************
16
17 class oracleDb:
18     con = None
19     def __init__(self,username,password,dbname):
20         self.username = username
21         self.password = password
22         self.dbname = dbname
23
24     #获取链接
25     def connectDB(self):
26         try:
27             self.con = cx_Oracle.connect(self.username,self.password,self.dbname)
28             print msgOutput(‘数据库已建立连接...‘,1)
29             return self.con
30         except Exception,e:
31             print msgOutput(‘数据库连接失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
32             sys.exit(0)
33
34     #def executeDB(self,sqlTxt):
35     #    try:
36     #        con = self.connectDB()
37     #        cursor = con.cursor()
38     #        cursor.execute(sqlTxt)
39     #        gename = cursor.fetchall()
40     #        cursor.close()
41     #        return  gename
42     #    except Exception,e:
43     #        print msgOutput(‘数据库查询失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
44     #        self.con.close()
45     #        sys.exit(0)
46     #关闭链接
47     def __del__(self):
48     #    self.cursor().clos[Msg-Prompt][%s])
49         try:
50             self.con.close()
51             print msgOutput(‘数据库已断开连接...‘ ,1)
52         except Exception,e:
53             print msgOutput(‘数据库关闭失败,原因: %s...‘ %str( e ).replace("\n","") ,0)

下面程序就是文件入库的具体程序:

  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3
  4 """
  5 @author:niklaus
  6 @date:20150723
  7 """
  8
  9 import sys,os
 10  11 import time,linecache
 12 import datetime
 13 sys.path.append( "这里是下面模块导入的路径" )
 14 from msgOutput import msgOutput
 15 from oracleDb import oracleDb
 16 nameReplace="文件入库程序"
 17
 18 #***************************************************************************************************
 19 #逻辑层
 20 #***************************************************************************************************
 21 def fileLoad(fileName,flag,tableName,*column_names):
 22     username = ‘数据库用户名‘
 23     password = ‘数据库密码‘
 24     dbname   = ‘数据库库名‘
 25     db = oracleDb(username,password,dbname)
 26     conn = db.connectDB()
 27     columnList = [item.upper() for item in column_names]    #将可变参数存入列表
 28     checkFileName(fileName)
 29     checkTableName(tableName,username,conn)
 30     checkColums(tableName,username,columnList,conn)
 31     loadInfos(fileName,flag,tableName,columnList)
 32     truncateTable(tableName,conn)
 33     loadDate(fileName,flag,tableName,columnList,conn)
 34
 35 #***************************************************************************************************
 36 #检查文件是否在
 37 #***************************************************************************************************
 38 def checkFileName(fileName):
 39     try:
 40         if not os.path.exists(fileName):
 41             print msgOutput("数据文件[%s]不存在!请仔细检查..." %fileName,0 )
 42             sys.exit(0)
 43     except Exception,e:
 44         raise e
 45
 46 def loadInfos(fileName,flag,tableName,columnList):
 47     lenFile = int(os.popen(‘wc -l %s‘ % (fileName)).read().split()[0])
 48     print msgOutput("数据文件[%s]共有 %d 条数据待入库..." %(fileName,lenFile),1 )
 49     print msgOutput("数据库表[%s]..." % (tableName.upper()),1 )
 50     print msgOutput("数据库表中字段%s..." % columnList,1 )
 51
 52 #***************************************************************************************************
 53 #检查数据库表是否存在
 54 #***************************************************************************************************
 55 def checkTableName(tableName,username,conn):
 56     try:
 57         sqlTxt = r‘‘‘ select object_name from all_objects
 58                       where owner = ‘%s‘
 59                       and object_type = ‘TABLE‘
 60                       and object_name = ‘%s‘
 61                   ‘‘‘ % (username.upper(),tableName.upper())
 62         cursor = conn.cursor()
 63         cursor.execute(sqlTxt)
 64         gename = cursor.fetchall()
 65         if len(gename) == 0:
 66            print msgOutput(‘数据库中表[%s]不存在!请检查确认...‘ %(tableName.upper()),0)
 67            sys.exit(0)
 68         else:
 69            return True
 70     except Exception,e:
 71         print msgOutput(‘数据库查询失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
 72         conn.close()
 73         sys.exit(0)
 74
 75
 76 #***************************************************************************************************
 77 #检查数据库表字段与输入的是否一致
 78 #***************************************************************************************************
 79 def checkColums(tableName,username,columnList,conn):
 80     try:
 81         sqlTxt = r‘‘‘
 82                   select column_name
 83                   from dba_tab_columns x
 84                   where x.table_name = ‘%s‘
 85                   and x.owner = ‘%s‘
 86                   ‘‘‘ % (tableName.upper(),username.upper())
 87         cursor = conn.cursor()
 88         cursor.execute(sqlTxt)
 89         gename = cursor.fetchall()
 90         columnDb = [ item[0] for item in gename ]
 91         for item in columnList:
 92             if item not in columnDb:
 93                 print msgOutput(‘输入字段与数据库表中字段不一致!请仔细检查!...‘  ,0)
 94                 sys.exit(0)
 95     except Exception,e:
 96         print msgOutput(‘数据库查询失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
 97         conn.close()
 98         sys.exit(0)
 99     #sqlTxt = r‘‘‘
100     #          select column_name
101     #          from dba_tab_columns x
102     #
103     #
104     #
105     #gename = db.executeDB(sqlTxt)
106     #columnDb = [ item[0] for item in gename ]
107     #for item in columnList:
108     #    if item not in columnDb:
109     #        print msgOutput(‘输入字段与数据库表中字段不一致!请仔细检查!...‘  ,0)
110     #        sys.exit(0)
111 #***************************************************************************************************
112 #清空将入库的表
113 #***************************************************************************************************
114 def truncateTable(tableName,conn):
115     try:
116         sqlTxt = r‘‘‘
117                   truncate table %s
118                   ‘‘‘ % tableName
119         cursor = conn.cursor()
120         cursor.execute(sqlTxt)
121         print msgOutput(‘数据库表[%s]已经清空!...‘ % tableName.upper(),1)
122         return True
123     except Exception,e:
124         conn.close()
125         print msgOutput(‘数据库执行失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
126
127 #***************************************************************************************************
128 #文件处理
129 #***************************************************************************************************
130 def loadDate(fileName,flag,tableName,columnList,conn,recordDefault=200000):
131     #recordDefault = 200000 if recordDefault > 200000 else recordDefault
132     try:
133         lines = [ item.split(flag)[:len(columnList)] for item  in linecache.getlines(fileName)]
134         lenCount = len(lines)
135         listInput = []
136         for x in xrange(0,lenCount,recordDefault):
137             listInput = lines[x:x+recordDefault]
138             if (dataInput(tableName,columnList,conn,listInput)):
139                print msgOutput(‘数据文件[%s]已经入库 %d 条数据...‘ %(fileName,len(listInput)),1)
140             listInput = []
141     except Exception,e:
142         print msgOutput (‘文件处理失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
143
144 #***************************************************************************************************
145 #数据入库
146 #***************************************************************************************************
147 def dataInput(tableName,columnList,conn,listInput):
148     try:
149         sqlValues = ",:".join(columnList)
150         sqlTxt = r‘‘‘
151                   insert into %s values(:%s)
152                   ‘‘‘ %(tableName,sqlValues)
153         cursor = conn.cursor()
154         cursor.executemany(sqlTxt,listInput)
155         conn.commit()
156         return True
157     except Exception,e:
158         print msgOutput(‘数据文件入库失败,原因: %s...‘ %str( e ).replace("\n","") ,0)
159         conn.close()
160         sys.exit(0)
161
162 def main():
163     flag = ‘|(这里是文件中数据与数据之间的分割符)‘
164     fileName = ‘文件的名称(全路径)‘
165     tableName = ‘temp_file_load_cs‘
166     print msgOutput(‘%s开始运行...‘ %nameReplace,1)
167     fileLoad(fileName,flag,tableName,"mr_copyright","mr_songid","mr_songname","mr_singerid","mr_singer")
168     print msgOutput(‘\033[1;32m%s序运行结束...\033[0m‘ %nameReplace,1)
169
170 if __name__==‘__main__‘:
171     main()

下面是程序的运行结果:

可以看出,我是每次入库20万条数据!360多万条数据入库用了一分三十三秒钟,总体来说速度还是不错的!

由于面向对象还不熟练,这次主要是python的面向过程编程,下次将该程序改成面向对象处理!

ps:本文为博主原创文章,由于功底不好,请勿随意转载!

时间: 2024-10-25 18:08:11

python操作文件入库的相关文章

Python 操作文件模拟SQL语句功能

Python操作文件模拟SQL语句功能 一.需求 当然此表你在文件存储时可以这样表示 1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作 1. 可进行模糊查询,语法至少支持下面3种: 1. select name,age from staff_table where age > 22 2. select * from staff_table where dept = "IT" 3. select * from

Python操作文件、文件夹、字符串

Python 字符串操作 去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sStr2 = sStr1 sStr1 = 'strcpy2' print sStr2 连接字符串 #strcat(sStr1,sStr2) sStr1 = 'strcat' sStr2 = 'append' sStr1 += sStr2 print sStr1 查找字符 #strchr(sStr1,sS

python操作文件和目录

python操作文件和目录 目录操作 # 查看当前目录 >>> os.path.abspath('.') '/Users/markzhang/Documents/python/security' # 查看当前目录 >>> os.getcwd() '/Users/markzhang/Documents/python/security' # 更改当前的工作目录 >>> os.chdir('/Users/markzhang/') >>> o

python, 操作文件和目录

操作系统提供的命令只是简单地调用了操作系统提供的接口函数,Python内置的os模块也可以直接调用操作系统提供的接口函数 基本功能 import os #操作系统类型 os.name #posix:Linux.Unix或Mac OS X,nt:Windows系统 #要获取详细的系统信息,Windows上不提供 os.uname() #环境变量查看 os.environ #要获取某个环境变量的值,可以调用os.environ.get('key') os.environ.get('PATH') os

用python操作文件和文件夹

我有一堆层级3到4级的文件夹,这里面存有的一些文件是我需要的,一些是我不需要的.需要的文件都存储在名字中有'Data'的文件夹内.现在我需要把这些文件提取(拷贝)到一个指定的文件夹里. 一个文件夹一个文件夹去点开是一种方法,但是对于层级比较深的文件夹是一件很枯燥的事情. 本着一切尽量自动化的原则,我用python来做这件事情. 这个需求归纳下来需要: 从一个起始目录开始 遍历每一个文件夹 如果文件夹的名字中有'Data',拷贝它的内容至目标文件夹 python对文件.文件夹的操作是非常常见的需求

python操作文件案例二则

前言 python 对于文件及文件夹的操作. 涉及到 遍历文件夹下所有文件 ,文件的读写和操作 等等. 代码一 作用:查找文件夹下(包括子文件夹)下所有文件的名字,找出 名字中含有中文或者空格的文件 ,并打印到TXT中. 背景:在Android环境下,有些图片或者文件资源 ,如果命名不规范,会引起崩溃,如果有中文的话,直接编译不过去, 所以我们需要找出它们,(可以直接在下面脚本中修改他们的名字) 代码如下: #coding=utf-8 # win 和 mac #查找所有空格名字 或者 空格 #

Python操作文件夹

python对文件夹的操作汇总,方便查阅使用 1.遍历指定目录,显示目录下的所有文件名 #-*- coding:utf-8 -*- import os def fileInFolder(filepath): pathDir = os.listdir(filepath) # 获取filepath文件夹下的所有的文件 files = [] for allDir in pathDir: child = os.path.join('%s\\%s' % (filepath, allDir)) files.

python操作文件与目录

title: OS文件及目录方法 tags: python os文件 os目录 grammar_cjkRuby: true --- os.access( ) 方法 os.access(path,mode) 方法用来检测文件或目录的权限,有两个参数: path: 文件或者目录的路径 mode: 需要检测的权限,其中 mode 的取值有: os.F_OK: mode的参数,检测path是否存在.==在bash中使用[ -f path_to_file ]来检测== os.R_OK: mode的参数,

Python操作文件文档

需要帮老师将44G的图书分类一下,人工当然累死了.所以用Python大法处理一下. 思路是读取文件目录下的书名,然后去百度百科查分类,如果还没有就去豆瓣,当当查.哪一个先找到其余的就不用找了.如果没有找到先不进行一下处理 ,当找到分类以后就开始将文件加入制定文件夹下的分类(如果没有分类文件夹则自动创建).当所有可以通过网络分类的书进行分类之后,剩余的书就通过划分关键字进行下一次的分类.目前先附上需要查询的资料.等44G在服务器上解压完毕,处理成功之后上代码. os.listdir(os.getc