RPA手把手——某银行销户数据处理难点解决

艺赛旗 RPA9.0全新首发免费下载 点击下载
http://www.i-search.com.cn/index.html?from=line1

需求
需要每天获取 txt 格式的销户数据,解析并按网点号生成 excel 表格。
销户数据内容如下:

网点号 账户 销户日期
006 750253334 2019-07-16
0
15 751
105418 2019-07-16
0
05 750
119448 2019-07-16
0
06 750
253334 2019-07-16
0
15 751
105418 2019-07-16
0
05 750
119448 2019-07-16
0
06 750
253334 2019-07-16
0
15 751
105418 2019-07-16
0
05 750
******119448 2019-07-16

末尾可能有数量不一定的几个空行。对于相同网点号的数据,都填到同一个以网点号命名的 excel 表中。

思路
依次读取每一行,将网点号作为 defaultdict 字典的键,账户及销户日期作为一个列表并插入对应键的值中;然后遍历这个字典,将每个键下的每组列表都连同这个键一起存放在一个列表中,最终实现的效果如下:

[[[‘750253334’, ‘2019-07-16’, '006’],
['750
253334’, ‘2019-07-16’, '006’],
[‘750253334’, ‘2019-07-16’, '006’]],
[['751
105418’, ‘2019-07-16’, '015’],
[‘751105418’, ‘2019-07-16’, '015’],
['751
105418’, ‘2019-07-16’, '015’]],
[[‘750119448’, ‘2019-07-16’, '005’],
['750
119448’, ‘2019-07-16’, '005’],
[‘750******119448’, ‘2019-07-16’, '005’]]]
算法
完整代码清单:

import fileinput
from collections import defaultdict
import itertools
import pprint

def parse_txt(path):
# 初始化一个值为列表类型的defauldict
dic = defaultdict(list)
# 使用fileinput进行文件行的高效率迭代
for line in fileinput.input(path):
try:
li = line.split()
# 不加if判断直接进行插值操作,进一步缩短运行时间
# 这种情况下会对第一行的中文也进行处理,后面需要剔除
dic[li[0]].append([li[1], li[2]])
# 碰到空行时li的结果为空列表,捕获到索引错误的异常时就退出for循环
except IndexError:
break
# 剔除操作
del dic[‘网点号’]
# 以键值对形式返回字典
return dic.items()

def change_defaultdict(items):
need_li = []
for item in items:
# 一行超人
need_li.append([list(itertools.chain(item[1][i], [item[0]])) for i in range(len(item[1]))])
# 这样写也行:need_li.append([item[1][i]+[item[0]] for i in range(len(item[1]))])
return need_li

if name == “main”:
# 使用pprint进行格式化打印
pprint.pprint(change_defaultdict(parse_txt(‘0716销户清单.txt’)))

你可能感兴趣的:(RPA教程,python基础,9.0版本体验)