用到的数据,软件,环境
100万+手机号 txt;
oracle 10;
sqlldr ;
plsqldev.exe ;
python 3.6;
windows 10;
数据量大动手比较难受。
这个txt 有很多垃圾数据 用oracle来弄的话还真没试过 正好手头有python环境 正则加list处理挺方便的
--创建用户
create user spring
identified by spring;
--分配管理员权限
grant dba to spring;
--回收权限
--revoke dba from pring;
效果图
// 新建一张名叫表phone的表
create table phone
(
id NUMBER,--//id
phone VARCHAR2(11)--//手机号
)
效果图
#1.首先说下SQL*LODER>ctl语法几个参数:
参 | 用法 | 含义 |
---|---|---|
load data | 把load data写开头 "加载数据" | “在日常运维中,会经常遇到将文件中数据导入到数据库中,如果是.sql文件,直接采用source方式即可;如果是.csv、.txt文件,可以采用 load data 方式。这两种方式都十分熟悉,这里说一种特殊情况:” |
characterset utf8 | 字符集utf8" | “表的存储格式” |
INFILE | INFILE 'I:/NavicatforMySQL/phone.txt' | “你要导入的文件放哪了?用的时候 记得 路径是被单引号包起来的” |
Append into table [表名] | Append into table phone | “字面意思,如果表有数据就在他后表追加新的数据。。。 追加数据到什么表” |
fields terminated by | fields terminated by ""匹配空格 | 文本文件是没有格式的,“”的意思是告诉oracle,这个前面是一个字段,后面是另一个字段,整个一行是一个记录。这样导入的数据表才不会乱 要是 1,2,3 这样的数据 就这样写 “,” |
--编写 insert.ctl 文件
load data
characterset utf8
INFILE 'I:/NavicatforMySQL/phone.txt'
Append into table phone
fields terminated by ""
(
phone
)
效果图
语法
userid=用户名/密码@数据库实例名control=脚本名
sqlldr userid=spring/spring@orcl control=insert.ctl
示例
执行结果
清空数据库
truncate table [表名];
delete from [表名];
用truncate、delete都可以清空表中数据。
SQL如下:
truncate table [表名];
delete from [表名];
delete与truncate的区别:
delete:会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments。
truncate: 是DDL操作,不产生rollback,速度快
truncate table phone
部分代码 – 这是去重
Python数据结构之一——list(列表)
集合:由一个或多个确定的元素所构成的整体。若x是集合A的元素,则记作x∈A。
集合中的元素有三个特征:
1. 确定性:集合中的元素必须是确定的;
2. 互异性:集合中的元素互不相同,例如:集合A={1,a},则a不能等于1);
3. 无序性:集合中的元素没有先后之分,例如:集合{3,4,5}和{3,5,4}算作同一个集合。
Python 3.x中的set特征与数学中类似。我们之前学过list、tuple以及dict。其实,set与dict大致相同,但set没有Value,只有key。因此,set只是一组key的集合。由于key不能重复,所以,在set中,没有重复的key。
import shutil
readPath='20170912.txt'
writePath='cnews.test2.txt'
phone=set() #list
outfiile=open(writePath,'a+',encoding='utf-8')
f=open(readPath,'r',encoding='utf-8')
for line in f: #逐行读取
if line not in phone: #看phone里有没有这行
outfiile.write(line) #没有就写
phone.add(line) #加上