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

Мне необходимо из текстового файла отфильтровать уникальные строки, начинающиеся с определенного слова (В данном случае "Database"). Код, который я наклепал работает плохо, т.к в итоге он мне дает не строки, а буквы в конечный файл. По отельности две части кода работают нормально (Код будет разделен комментарием в том месте, где были содинены эти самые части)

# /usr/bin/python3.8

import sys

if len(sys.argv) != 3:
    print("Usage: python cleaner.py [input file] [output file]")
    exit()


k = set(open(sys.argv[1], 'r').readlines())
uniqlines = set(k)

ke = open("temp.txt", "w+").writelines(set(uniqlines))

# Сверху код отвечает за уникальность строк, снизу за их фильтрацию по ключевому слову в начале

word = "Database :"
temp = open("temp.txt", "r").read()
print(temp)

for i in temp:
    if word in i:
        z = open(sys.argv[2], 'w')
        z.write(i)
        z.close()

Все это я натравливал на input.txt, содержание примерно следующее:

Database : Arango
IP : 192.168.1.1
Name : 121314
MAC : 11:11:11:11:11


Database : Postgres
IP : 192.168.1.2
Name : 121455412
MAC : 11:11:22:22:11


Database : KMS
IP : 192.168.3.1
Name : 121131221
MAC : 11:11:99:99:11

Файл ЗНАЧИТЕЛЬНО БОЛЬШЕ, 28.2 Кб весом, дать его содержимое я не могу т.к файл содержит слишком много данных и вдобавок содержит приватную информацию


Ответы (1 шт):

Автор решения: CrazyElf
temp = open("temp.txt", "r").readlines() # <- исправлено здесь
print(temp)

with open(sys.argv[2], 'w') as z: # <- сразу открываем файл (закроется он сам)
    for i in temp:
        if i.startswith(word): # <- исправлено здесь
            z.write(i)
  • Чтобы получился список строк, нужно читать файл через readlines, а не через read.
  • Если вас интересуют строки, которые начинаются с определённого слова, то для проверки этого есть специальная функция startswith. Хотя и ваш вариант тоже будет работать в данном случае
→ Ссылка