Как отфильтровать из файла уникальные строки, начинающиеся с определенного слова
Мне необходимо из текстового файла отфильтровать уникальные строки, начинающиеся с определенного слова (В данном случае "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. Хотя и ваш вариант тоже будет работать в данном случае