@2018年12月24日
- 背景
由于工作性质,经常面对不同的问题,某些场景下SQL+Excel、常用办公软件不能处理,这时到网上找一些案例,自己动手用python处理。后续,借此博客记录比较典型的处理过程。
后续,陆续实际处理的问题,如
- 合并PDF(https://blog.youkuaiyun.com/weixin_44230447/article/details/85231757)
- 拆分PDF(https://blog.youkuaiyun.com/weixin_44230447/article/details/85232235)
- 敏感字段MD5脱敏(https://blog.youkuaiyun.com/weixin_44230447/article/details/85233266)
- 从非架构化的大文本文件中提取指定条件的记录
- 需求
工作中会遇到一种情况,如银行对账流水,系统日志等,可能一天一个,有很多,并且都有表头,实际记录可能要从第n+1行开始。但我们只需要从中找指定条件的少量记录。当然,你可以将所有这些记录都导入数据库,时间成本会高些。
这里推荐用python的文件操作功能,简单实现需求。perl 语言也很高效。
附件,为某次分析处理银行对账流水的一个例子(需3.x环境),从多个对账单中检索。当第一个字段为‘来账’且第6个字段不为空,则保留;当第一个字段为‘去账’且第10个字段不为空,则保留,其余跳过。
简单说明如下:
1、第40行,指定对账单存放的文件夹。如“F:/中行流水/7月/”
2、第41行,指定待检索的所有对账单文件清单,如“1707file_list.txt”。可用dos 命令, copy *.txt >> 1707file_list.txt 生成,然后修改。大家,可以参考“合并多个PDF”的程序优化,指定文件夹然后自动遍历所有文本文件,自动生成文件清单。
3、第44行,skip_lines 参数指定程序要跳过的行数
4、第49行,指定从多个对账单检索出的记录,合并存放的文件名。
5、第33和34行,如取消# 注释,可以先检索50行。
6、第10行,指定检索的关键字,如“备付金”
7、第19行,split(’|’),本例文件的字段间隔符号为 |。如tab,则为’\t’。
- Python 程序
#导入银行对账流水,并筛选
import numpy as np
#load data from file
#从txt文件导入数据,
def load_data(in_filename,out_filename,skip):
in_file = open(in_filename,'r')
out_file= open(