#python #sed #re
#python #sed #python-re
Вопрос:
Я совершенно новичок в Python. Я пытаюсь создать аналоговую команду bash: cat domains.txt |sort -u|sed 's/^*.//g' > domains2.txt
файл domains содержит список доменов с префиксом маски и без *.
него, например:
*.example.com
example2.org
Около 300 тыс. строк
Я написал этот код:
infile = "domains.txt"
outfile = "2"
outfile2 = "3"
with open(infile) as fin, open(outfile, "w ") as fout:
for line in fin:
line = line.replace('*.', "")
fout.write(line)
with open('2', 'r') as r, open(outfile2, "w") as fout2 :
for line in sorted(r):
print(line, end='',file=fout2)
его вырезание *.
, как и планировалось, сортирует список, но не удаляет дубликаты строк
Я посоветовал использовать re.sub вместо replace, чтобы сделать шаблон более строгим (как в sed, где я делаю это с начала строк), но когда я попробовал это:
import re
infile = "domains.txt"
outfile = "2"
outfile2 = "3"
with open(infile) as fin, open(outfile, "w ") as fout:
for line in fin:
newline = re.sub('^*.', '', line)
fout.write(newline)
with open('2', 'r') as r, open(outfile2, "w") as fout2 :
for line in sorted(r):
print(line, end='',file=fout2)
это просто не работает с ошибками, которые я не понимаю.
Ответ №1:
В регулярных выражениях *
.
и так же являются специальными символами. Вы должны избегать их, чтобы использовать их.
import re
s = "*.example.com"
re.sub(r'^*.', '', s)
> 'example.com'
Комментарии:
1. спасибо, я просто не знал, что его работа так же, как в оболочке с
2. теперь его работа, но очень интересная, вырезание и сортировка одного и того же файла через оболочку и через python, дала мне разные результаты. Исходный файл содержит 391033 строки, после сортировки оболочки вырезания я получил 258604 строки, после этого скрипты на python я получил 242825 строк в результате. Завтра попытаюсь найти, в чем разница