请问怎么对文本进行数据处理、挖掘?

2018-07-16 09:32:36 +08:00
 linuxsteam

如图所示,我要在类似的数据上进行数据处理,剔除前面的 60832 列数据, 然后后面框中数据要切割三段进行收集(这个好处理,按长度切割就可以),但是后面的数据有的后面带空格(如箭头所示)。

现在我的思路是按照数据位置切割(即利用 UltraEdit 的列模式进行区域选择) 但是文本文件数据很大,处理起来 这个不是上上策。。

现在想用 ETL kettle 抽取(朋友推荐的),但是我从未使用过此软件,研究良久没有发现我想要的功能。虽然这个软件真的很强大。

考虑过正则,但是数据并不是特别规则,我写不出来。

总结起来问题就下面三点。

  1. 在没有太明确规则的数据中(但是宽度差不多相同,除了部分有空格的),怎么切割数据?
  2. 上述问题大家有没有类似的情况?
  3. 我是想入库的,最早是利用 navicat 导入向导操作的。但是效率不咋样,而且数据处理的也不完美。现在喜欢上了 kettle,不知道是否可以经过此软件达到我的目的?
1551 次点击
所在节点    问与答
16 条回复
noqwerty
2018-07-16 10:09:36 +08:00
感觉两列之间空格数比较多?可以先正则"/\s{15,1000}/,/",然后把逗号作为分隔符分列后处理就行了,pandas 或者随便其他什么库应该都很方便。
qinrui
2018-07-16 10:16:04 +08:00
awk 了解一下
linuxsteam
2018-07-16 10:33:32 +08:00
@noqwerty 多谢开窍,我再研究研究怎么只替换空格 保留换行符
noqwerty
2018-07-16 10:35:17 +08:00
@linuxsteam 2 楼说的 awk 干这个应该很方便,但是我不会…… sed 应该也可以,总之能干活就行,多写几行少写几行的事。
linuxsteam
2018-07-16 10:50:37 +08:00
@noqwerty 嘻嘻 我用 sublime 弄的, kettle 支持正则匹配 但是能不能处理 再研究,就是总多替换多一个空格很难受
linuxsteam
2018-07-16 10:51:02 +08:00
多替换出来一个逗号,不是空格。。
ynyounuo
2018-07-16 10:56:59 +08:00
按长度来,如果你用 Sublime Text 直接 Ctrl + Shift + L 不就好啦?
iango
2018-07-16 11:12:13 +08:00
excel 分列?新版能处理 1048576 行。如果不会编程语言,感觉这个最简单了。
如果用文本编辑器,正则最方便。
dexterzzz
2018-07-16 11:16:48 +08:00
power query
sunnyadamm
2018-07-16 12:00:41 +08:00
awk,python,excel 等等,能处理的太多了,稍稍自己研究一下切割就 OK 了
linuxsteam
2018-07-16 12:15:29 +08:00
@iango 我会点正则,数据分分钟超过 300w 行
imn1
2018-07-16 13:01:51 +08:00
300w,没哪个 GUI 能一次搞定,CLI 吧
按行读取,分割字串,入库
princelai
2018-07-16 13:02:17 +08:00
```
cat tmp.txt
60801 201805316549884131316646111
60802 20180531564897132123131 11
60803 20180531897611346504861 11
60804 201805310021654812056115611
```


```
cat tmp.txt | awk -F'\\s{5,}' '{print $2}'
201805316549884131316646111
20180531564897132123131 11
20180531897611346504861 11
201805310021654812056115611
```



5 只要大于后面的空格数的任意数字就可以,python 就不给你谢了,反正都是正则表达式
princelai
2018-07-16 13:25:32 +08:00
没看清你是要再次分割后面,你试试下面这段

```
cat tmp.txt | awk -v OFS='\t' -F'\\s{5,}' '{split($0,a)};{print substr(a[2],1,8),substr(a[2],9,10),substr(a[2],19,length(a[2]))}'
20180531 6549884131 316646111
20180531 5648971321 23131 11
20180531 8976113465 04861 11
20180531 0021654812 056115611
```
x18960
2018-07-17 19:50:14 +08:00
@princelai 谢谢大佬,请问 不想剔除换行符怎么做?\s 无差别替换啊
princelai
2018-07-19 18:50:31 +08:00
@x18960 根据图片里的内容,我觉得剔除换行可以工作啊,没见过你的数据我不好说怎么弄

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/471184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX