为了账号安全,请及时绑定邮箱和手机立即绑定

如何删除文件中的重复行?

/ 猿问

如何删除文件中的重复行?

慕少森 2019-10-29 14:17:02

我有一个只有一栏的文件。如何删除文件中的重复行?



查看完整描述

3 回答

?
繁花不似锦

在Unix / Linux上,uniq根据David Locke的答案使用命令,或sort根据William Pursell的注释使用命令。


如果您需要Python脚本:


lines_seen = set() # holds lines already seen

outfile = open(outfilename, "w")

for line in open(infilename, "r"):

    if line not in lines_seen: # not a duplicate

        outfile.write(line)

        lines_seen.add(line)

outfile.close()

更新:本sort/ uniq组合将删除重复,但返回与排序线,这可能会或可能不是你想要的是一个文件。上面的Python脚本不会对行进行重新排序,而只会删除重复项。当然,要使上面的脚本也能排序,只需outfile.write(line)在循环之后省去and,然后立即执行即可outfile.writelines(sorted(lines_seen))。


查看完整回答
反对 回复 2019-10-29
?
jeck猫

uniqlines = set(open('/tmp/foo').readlines())

这将为您提供唯一行的列表。


将其写回到某个文件将很容易:


bar = open('/tmp/bar', 'w').writelines(set(uniqlines))


bar.close()


查看完整回答
反对 回复 2019-10-29
?
紫衣仙女

这是对这里已经说过的内容的重新表达-这里是我所使用的。


import optparse


def removeDups(inputfile, outputfile):

        lines=open(inputfile, 'r').readlines()

        lines_set = set(lines)

        out=open(outputfile, 'w')

        for line in lines_set:

                out.write(line)


def main():

        parser = optparse.OptionParser('usage %prog ' +\

                        '-i <inputfile> -o <outputfile>')

        parser.add_option('-i', dest='inputfile', type='string',

                        help='specify your input file')

        parser.add_option('-o', dest='outputfile', type='string',

                        help='specify your output file')

        (options, args) = parser.parse_args()

        inputfile = options.inputfile

        outputfile = options.outputfile

        if (inputfile == None) or (outputfile == None):

                print parser.usage

                exit(1)

        else:

                removeDups(inputfile, outputfile)


if __name__ == '__main__':

        main()


查看完整回答
反对 回复 2019-10-29

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信