• 关于2000W数据


    前几天在博客园首页看到这个2000W数据的消息,刚好这个学期正在SQL入门,加上好奇心的驱使,把这个下载下来。

    一个是600多M的CSV文件,还有一个是1.7G的SQL Server的备份文件,解压后都接近8G了,试着在sql server2000上导入一下,貌似直接就说太多了……汗

    所以,只好先看看这个CSV文件了,这个解压后也接近2G了,一般的文本编辑器似乎都没辙了,excel之类的东西更是别指望了,好吧,我先承认我的电脑很差,80G的硬盘,并口,ATA/133……呃

    我用HEX编辑软件查看了一下,居然是UTF8的编码,那就先用Python简单写段查询,看看有没有村里人中枪吧,哈哈

    # -*- coding: utf-8 -*-
    def cn(s):
        return s.decode("utf8").encode("gbk")
    
    try:
        fp=file("2000w.csv","r")
        while 1:
            fp.seek(0)
            word=raw_input(cn("查询关键词:"))
            fout=file(word+".txt","w")
            #sline=int(raw_input(cn("起始行:")))
            if word=='exit':break
            word=word.decode("gbk").encode("utf8")
            i=0
            print "start..."
            while 1:
                i=i+1
                datl=fp.readline()
                if datl=="":break
                if i%10000==0:print i
                #if i<sline:continue
                if datl.find(word)>0:
                    tstr=cn("【Line:%d】%s"%(i,datl))
                    print tstr,
                    print>>fout,tstr,
                    #pmt=raw_input(cn("是否继续(y/n):"))
                    #if pmt=='n':break
            print "end"
            fout.close()
    finally:
        fp.close()
        fout.close()
    

    顺便把查询记录也保存为一个文件,结果……似乎没发现认识的人,看来他们的保密措施做的不错,哈哈。

    终归还是为了练习SQL的,所以还是要将数据导入到sql server先。

    在此吐槽一下微软的东西,安装包越做越大,装个软件好几个小时,记得去年装个VS2012Express居然花了整整一上午!!!

    所以,对于我这种偏执狂以及标准穷屌丝来说,VC用6.0,sql server用2000的,还是云端版,才几十M,入门学习足够了,哈哈。

    回正题,我试着将CSV文件导入到SQL Server里去,发现编码方式只能选择ANSI或者Unicode之类的,选Unicode后英文字符都不正确了,ANSI的话中文肯定乱码,所以还是用Python将编码转成UTF8,插了下资料,UTF8的文本文件有个3字节的文件头,EFBBBF,我直接把它忽略了,哈哈

    #MAXLIST=1000
    
    frp=file("2000w_utf8.csv","r")
    fwp=file("2000w_ansi.csv","w")
    i=1
    dat=frp.readline()
    fwp.write(dat[3:])
    try:
        while 1:
            i=i+1
            if i%10000==0:print i
            dat=frp.readline()
            if dat=="":break
            #if i>MAXLIST:break
            else:
                try:
                    dat_w=dat.decode("utf8").encode("gbk")
                except UnicodeEncodeError:
                    print "gbk encode error"
                    fwp.write(dat)
                fwp.write(dat_w)
    except Exception,e:
        print e
    finally:
        frp.close()
        fwp.close()
    print "ok"
    

    这样,导入SQLServer就正确了。

    PS:我的数据似乎只有1200多万,没有2000W啊,不知是不是没有下载到完整版,嘿嘿

  • 相关阅读:
    开源软件的国内镜像
    ruby学习之路(一)
    VBS正则表达式
    fscanf和feof的组合使用
    计算机产生随机数
    常用:JQ
    unitegallery 测试使用-自动播放关闭
    H5重力感应(转)
    JS中,如何判断一个数是不是小数?如果是小数,如何判断它是几位小数 保留n位小数
    input禁止显示历史输入记录
  • 原文地址:https://www.cnblogs.com/fwindpeak/p/3392955.html
Copyright © 2020-2023  润新知