4个.sql格式的文件,2G大小,直接插入mysql数据中,文件太大了,导入不进去。

太大的文件用python处理也很麻烦,处理不了,只能先分隔成小文件处理。

文件中数据格式:其中values里面的数据才是需要的。

insert into posdata_track_12_1 (SEQID, HOSTID, HOSTNO, POS_TIME, POS_DATAFMT, POS_LAT, POS_LONG, POS_SPEED, POS_ANGLE, POS_STARS, POS_SIGLEVEL, GATENO, REC_TIME, SAVEDTOHISREC, POSDESCRIPTION, ACCSTATUS, GPSCHANNALTYPE, HIGHBEAMSTATUS, LOWBEAMSTATUS, LEFTTURNSTATUS, RIGHTTURNSTATUS, BRAKESTATUS)
values (7, 8, 'aa', to_date('05-12-2016 17:16:35', 'dd-mm-yyyy hh24:mi:ss'), 0, 31.991888, 118.751997, 0, 209, -1, '00', 22, to_date('05-12-2016 23:14:00', 'dd-mm-yyyy hh24:mi:ss'), 0, '*', -1, 1, 1, 1, 1, 1, 1);

insert into posdata_track_12_1 (SEQID, HOSTID, HOSTNO, POS_TIME, POS_DATAFMT, POS_LAT, POS_LONG, POS_SPEED, POS_ANGLE, POS_STARS, POS_SIGLEVEL, GATENO, REC_TIME, SAVEDTOHISREC, POSDESCRIPTION, ACCSTATUS, GPSCHANNALTYPE, HIGHBEAMSTATUS, LOWBEAMSTATUS, LEFTTURNSTATUS, RIGHTTURNSTATUS, BRAKESTATUS)
values (4, 5, 'bb', to_date('05-12-2016 23:14:08', 'dd-mm-yyyy hh24:mi:ss'), 0, 32.146457, 118.866008, 3, 335, -1, '00', 21, to_date('05-12-2016 23:14:12', 'dd-mm-yyyy hh24:mi:ss'), 0, '*', -1, 1, 1, 1, 1, 1, 1);

第一步 :把文件每个大文件分成很多个100M左右的小文件,单独建文件夹

在 linux 下 ,分隔文件语句有2种写法,按照行分隔和按照大小分隔。

为了避免某一行数据被拆分掉导致数据出错,要按照行分隔,但是按行分隔,不知道多好行合适,一般100M合适。那么先按照大小分隔一次,看每个100M的文件是多好行,然后按照这么多行分隔即可。

按大小分隔语句:split -b 102400k 7.sql    #表示每个大文件被分隔成 100M,分成多少个是系统自动分的

按行分隔,假设上面语句得到每个文件是 50万行,那么 语句为:split -l 500000   7.sql

这样就实现了 每个小文件100M,且不会出现某一行被分开的情况。分隔后的文件是系统自动命名的,

第二步,用python处理文件

因为只有4个大文件,所以建立4个文件夹,每个文件夹里面放每个大文件分隔出来得小文件。

一个文件夹一个的处理。假设第一个文件夹是 7m_sql,最终输出了data_out文件。程序中先获取这个文件夹下面的所有文件,再循环处理每个文件,最后统一输出到一个文件中。

因为.sql文件中有很多“insert into。。。”等插入表结构的脏数据,所以要去掉这些数据,好在他们是一行的。这个处理完了,就可以了,输出的是文件,直接导入hive即可。

还要注意一点是,刚开始文件从window系统传过来的,程序可能会格式乱码报错。要知道源文件是什么编码的格式,不知道的话,就试ascii,gbk,gbk2312,utf8等格式。我这个是gbk2312的格式。

import os
import copy
import codecs
os.chdir('/Users/a/Desktop/7m_sql')
wk_dir="/Users/a/Desktop/7m_sql" def get_filename(wk_dir):
file_name=[]
fi=[]
for root,dirs,files in os.walk(wk_dir):
fi=files
for j in range(len(fi)):
#if fi[j][-3:] in ('xls','XLS') :
file_name.append(fi[j])
if '.DS_Store' in file_name:
file_name.remove('.DS_Store')
return file_name file_name_lt=get_filename(wk_dir) print file_name_lt data_lt=[]
for t in file_name_lt:
print t
f_in = codecs.open(t,'r','gb2312')
for i in f_in.readlines():
#print i#.decode('utf8')
if i[:6]=="values":
a=i.replace('values','').replace('to_date(','').replace(', \'dd-mm-yyyy hh24:mi:ss\'','') \
.replace('(','').replace(')','').replace(';','').replace('\'','').strip()
#print a
b=a.split(',')
#print b
data_lt.append(b)
f_in.close() f_out=codecs.open('data_out','w','utf-8')
for j in data_lt:
f_out.write('|'.join(j)+'\n')

python处理分隔大文件的更多相关文章

  1. Python逐块读取大文件行数的代码 - 为程序员服务

    Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...

  2. python 小程序大文件的拆分合并

    1. 将大文件拆分为小文件 I 通过二进制的方式将大文件读取出来,将其拆分存,以不同的文件方式存放在一个目录下面 II 提供两种操作方式交互式和命令行模式 #! usr/bin/python # -* ...

  3. python里如何计算大文件的md5

    在python3中,有了一个hashlib,可以用来计算md5,这里先给出一个简单的例子: import hashlib sstr="i love hanyu" print(has ...

  4. Python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_97 最近无论是面试还是笔试,有一个高频问题始终阴魂不散,那就是给一个大文件,至少超过10g,在内存有限的情况下(低于2g),该以什 ...

  5. python 如何读取大文件

    一般的读取文件的方法: with open(file_path, "r") as f: print f.read() 或者 with open(file_path,"r& ...

  6. python实现将大文件夹分割成多个子文件夹

    楼主用的linux,一旦数据达到几万,文件夹打开就会变卡,同时也方便同时分工协作,便于git管理,写了个将大文件夹分割成多个小文件夹的脚本 如操作文件夹:img,脚本不破坏img的数据,创建img_1 ...

  7. python读写txt大文件

    直接上代码: import easygui import os path = easygui.fileopenbox()#path是打开的文件的全路径 if path:#如果选择打开文件,没有选择取消 ...

  8. python json及mysql——读取json文件存sql、数据库日期类型转换、终端操纵mysql及python codecs读取大文件问题

    preface: 近期帮师兄处理json文件,须要读到数据库里面,以备其兴许从数据库读取数据.数据是关于yelp站点里面的: https://github.com/Yelp/dataset-examp ...

  9. Python 之读取大文件readline与readlines的差别

    import time def get_all_lines(filename): start_time = time.time() try: f = open(filename, 'rb') exce ...

随机推荐

  1. 如何使用Django 启动命令行及执行脚本

    使用django启动命令行和脚本,可以方便的使用django框架做开发,例如,数据库的操作等. 下面分别介绍使用方法. django shell的启动 启动命令: $/data/python-virt ...

  2. 【jmeter】jmeter测试网站QPS

    上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.co ...

  3. 汇编,浮点运算符,fldpi,fmul等指令说明.

    协处理器指令系统 协处理器共有68条不同的指令,汇编程序在遇到协处理器指令助记符时,都会将其转换成机器语言的ESC指令,ESC指令代表了协处理器的操作码. 协处理器指令在执行过程中,需要访问内存单元时 ...

  4. 解决IE下select标签innerHTML插入option的BUG(兼容

    在ie下面使用innerHTML来插入option选项的话,ie会去掉前面的<option>,并拆分成多个节点,这样会造成select的出错   前言: 这是一个老bug了,现在提供一个完 ...

  5. Python3 open()函数参数

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=No ...

  6. 数据库之Mysql高级

    简介 实体与实体之间有3种对应关系,这些关系也需要存储下来 在开发中需要对存储的数据进行一些处理,用到内置的一些函数 视图用于完成查询语句的封装 事务可以保证复杂的增删改操作有效 关系 创建成绩表sc ...

  7. svn+apache快速安装

    1.[安装基本软件包],  yum -y install httpd subversion mod_dav_svn 2.[验证svn安装是否成功及httpd 的mod_dav模块是否加载] svn - ...

  8. api 1.1构架篇

    首先让其自动加载??? 在YiiBase.php里面 改写autoload方法:     /**     * Class autoload loader.     * This method is p ...

  9. webserver有哪些

    http://blog.csdn.net/mfsh_1993/article/details/70245380 常用web服务器有Apache.Nginx.Lighttpd.Tomcat.IBM We ...

  10. 46. linux下解压.tar.gz文件

    tar -zxvf jdk-7u55-linux-i586.tar.gz 步骤二:解压jdk-7u55-linux-i586.tar.gz ,执行以下命令: #mkdir /usr/local/jav ...