如何消除文件中的重复行:python

时间:2017-02-22 10:32:55

标签: python string file

我们有2个文件:一个包含输入数据,另一个包含结果。文件中的所有信息都排成一行。程序应在文件中查找重复的行,并仅打印不重复的行。以下是输入数据的示例:

apple
apple
apple
apple
banana
bargain
brick
brick
sample
sample
simple
text
text
text

以下是输出文件的示例:

apple
banana
bargain
brick
sample
simple
text

这是我的代码:

fileFrom = open ('data.txt', 'r')
fileTo = open ('result.txt', 'w')

line = fileFrom.readline()

while line != '':
    line = line.rstrip('\n')
    if line == fileFrom.readline():
        line = fileFrom.readline()
    else:
        fileTo.write(line + '\n')
    line = fileFrom.readline()

fileFrom.close()
fileTo.close()

由于某种原因,该程序只是重新打印输入文件。 我的导师告诉我不要使用任何结构作为数组或列表,所以我们只需要比较行。

5 个答案:

答案 0 :(得分:2)

您的代码中的“if”比较以及“if”内部的读数太多次了。不仅需要剥离每一行,而且只有在初始行被剥离时进行比较。

with open ('data.txt', 'r') as fileFrom:
    with open ('result.txt', 'w') as fileTo:
        line = fileFrom.readline()
        while line != '':
            line = line.rstrip('\n')
            line2 = fileFrom.readline().rstrip('\n');
            while(line==line2):
                line2 = fileFrom.readline().rstrip('\n');
            fileTo.write(line +'\n')
            line = line2

答案 1 :(得分:2)

你比较两条线,其中一条剥去换线,另一条你没有,它们永远不会匹配,所有的线都会写出来。

line = line.rstrip('\n')            # stripped
    if line == fileFrom.readline(): # compare stripped to non-stripped

您也在进行太多的readline操作。最初的一个是循环中的3,这是经常读取线条并且看起来像你可能会错过比较一些线条。使用for in循环迭代文件要简单得多。

要确定两者都是rstrip ped时的值。您需要比较剥离的字符串,因为最后一行没有换行符。

with open ('data.txt', 'r') as fileFrom:
    with open ('result.txt', 'w') as fileTo:
        last = ''
        for line in fileFrom:
            if line.rstrip() != last.rstrip():
                fileTo.write(line)
                last = line

这个解决方案给出了问题的约束条件,如果所有重复项在后续行上组合在一起,则只选出重复的行。

答案 2 :(得分:1)

if line == fileFrom.readline():
        line = fileFrom.readline()

您每行调用两次“fileFrom.readline()”方法。这就是你的代码无法正常工作的原因。

您可以使用此代码。

fileFrom = open("data.txt", "r")
fileTo = open("result.txt", "w")
unique_lines = set()
for line in fileFrom.readlines():
    line = line.rstrip('\n')
    if line not in unique_lines: # check the duplicate lines
        fileTo.write(line+'\n')
        unique_lines.add(line)
fileTo.close()

答案 3 :(得分:0)

首先迭代每一行,删除不需要的字符并将其添加到set中,因此唯一的唯一值就是那里,一旦你有一组唯一值,就可以将它写入文件。

您可以使用以下代码

fileFrom = open ('data.txt', 'r')
fileTo = open ('result.txt', 'w')


def readFile():
    lines=set()
    with open('data.txt') as f:
        for line in f:
            lines.add(line.strip())
        return lines

def writeToFile(lines):
    for line in lines:
        fileTo.write(line + '\n')

lines=readFile()
print lines
if lines:
    writeToFile(lines)

答案 4 :(得分:0)

你可以用正则表达式吗?如果可以的话,可以尝试一次打印每个项目:

import re 
file1 = open("inputrep","r").read()
file2 = open("output.txt","w")
file2.write(re.sub(r"(\w+\n)\1+",r"\1",file1))
file2.close()