我们有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()
由于某种原因,该程序只是重新打印输入文件。 我的导师告诉我不要使用任何结构作为数组或列表,所以我们只需要比较行。
答案 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()