http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
aaaa=haha bb=zzzz/xxx
bb=zzzz/xxx aaaa=haha
其中第1,2行是重复的,然而我也希望第3,4行业是重复的。
如果文件中有上述2种类型的重复,需要去重,只保留一行
http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
aaaa=haha bb=zzzz/xxx
bb=zzzz/xxx aaaa=haha
其中第1,2行是重复的,然而我也希望第3,4行业是重复的。
如果文件中有上述2种类型的重复,需要去重,只保留一行
最近在学python,于是用python测试了一下,就上述内容是可行的,当然代码的严谨性、成熟性有待验证,望诸位前辈指点。
思路是利用python字典的属性以及题者给出的内容含有的规律进行拆分检索
贴上代码如下 python2.7 运行环境centos 7
[root@localhost duplicate_removal]# cat duplicate_removal.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# ###########################
# File Name: duplicate_removal.py
# Author: eithney
# Mail: ateithney@gmail.com
# Created Time: 2017-06-21 15:50:25
# Modified Time: 2017-06-21 16:30:24
# ###########################
# 行内容转化为字典方法
def get_dict(line):
# 去除行尾'\n', 并通过空格' ' 来划分该行内容
key_value = line.strip('\n').split(' ')
# 创建临时字典, 将该行内容中'='左右参数转化为字典的KEY、VALUE
d = {}
for kv in key_value:
kv = kv.split('=')
d[kv[0]] = kv[1]
# 返回该行字典化后的内容
return d
if __name__ == '__main__':
# 打开待去重文件old.txt
with file('old.txt', 'r') as rf:
# 迭代每行内容
lines = rf.xreadlines()
# 通过字典来识别重复行
check_dict = {}
# 起始行设置为1
line_num = 1
# 初始化待写入文件
wf = file('new.txt', 'w')
for line in lines:
# 如果该行字典化内容与字典缓冲中内容重复
if get_dict(line) in check_dict.values():
# 跳过,并输出重复行
print 'line %s exists, pass.' % line_num
# 内容不重复
else:
# 当前行字典化后内容写入字典缓冲用于后续检索
check_dict[line_num] = get_dict(line)
# 当前行原文写入新文件中
print 'write to file: %s' % line
wf.write(line)
# 处理下一行
line_num += 1
wf.close()
rf.close()
# 程序代码结束
待去重内容存在old.txt
[root@localhost duplicate_removal]# cat old.txt
http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
aaaa=haha bb=zzzz/xxx
bb=zzzz/xxx aaaa=haha
去重后的内容在new.txt中
[root@localhost duplicate_removal]# cat new.txt
http_method=POST uripath=/seeyon/hrforge.do method=verifyFormData
aaaa=haha bb=zzzz/xxx