Как мне скопировать все повторяющиеся строки файла в новый файл в Python? - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь написать код, чтобы скопировать все дубликаты файла в новый файл.Написанная мною программа проверяет первые 3 элемента каждой строки и сравнивает их со следующей строкой.

f=open(r'C:\Users\xamer\Desktop\file.txt','r')
data=f.readlines()
f.close()
lines=data.copy()
dup=open(r'C:\Users\xamer\Desktop\duplicate.txt','a')
for x in data:
    for y in data:
        if (y[0]==x[0]) and (y[1]==x[1]) and (y[2]==x[2]):
            lines.append(y)
        else:
            lines.remove(y)
dup.write(lines)
dup.close()

Я получаю следующую ошибку:

Traceback (most recent call last):
  File "C:\Users\xamer\Desktop\file.py", line 80, in <module>
    lines.remove(y)
ValueError: list.remove(x): x not in list

Есть предложения?

1 Ответ

0 голосов
/ 10 июня 2018

Эти фрагменты должны выполнять ту работу, о которой вы просили.В начале я думал создать список duplicated_lines, а затем написать все в конце.Но затем я понял, что могу оптимизировать производительность кода, избегая дополнительного заключительного цикла, просто записывая повторяющиеся элементы на лету

Как подчеркнул другой пользователь, не совсем понятно, хотите ли вы проверять только смежные двойные записиили повторяющиеся элементы независимо от позиции

В первом случае - где повторения следуют сразу после - это код:

# opening the source file
with open('hello.txt','r') as f:
    # returns a list containing the original lines
    data=f.readlines()

# creating the file to host the repeated lines
with open('duplicated.txt','a') as f:

    for i in range(0, len(data)-1):
        # stripping to avoid a bug if the last line is a repeated item
        if(data[i].strip('\n') == data[i+1].strip('\n')):
            print("Lines {}: {}".format(i, data[i]))
            print("Lines {}: {}".format(i+1, data[i+1]))
            #duplicated_lines.append(data[i])
            print("Line repeated: " + data[i])
            f.write("%s\n" % data[i])

Если вместо этого вы хотите проверить повторяющиеся строки по всему файлу, этоэто код:

# opening the source file
with open('hello.txt','r') as f:
    # returns a list containing the original lines
    data=f.readlines()

# creating the file to host the repeated lines
with open('duplicated.txt','a') as f:    
    for i in range(0, len(data)-1):
        for j in range(i+1, len(data)):
            # stripping to avoid a bug if the last line is a repeated item
            if(data[i].strip('\n') == data[j].strip('\n')):
                print("Lines {}: {}".format(i, data[i]))
                print("Lines {}: {}".format(j, data[j]))
                #duplicated_lines.append(data[i])
                print("Line repeated: " + data[i])
                f.write("%s\n" % data[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...