thomas的动力火车 2017-06-21 05:38 采纳率: 33.3%
浏览 1164
已采纳

脚本怎么完成对文件去重

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种类型的重复,需要去重,只保留一行

  • 写回答

1条回答 默认 最新

  • Eithney 2017-06-21 08:58
    关注

    最近在学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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 outlook无法配置成功
  • ¥15 Pwm双极模式H桥驱动控制电机
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换