Удаление слов Python при определенном условии в списке предложений

#python #string

#python #строка

Вопрос:

Моим исходным файлом был .txt, который выглядел как:

 https://www.website.com/something1/id=39494 notes !!!! other notes
https://www.website2.com/something1/id=596774 ... notes2 !! other notes2
  

и так далее .. так что очень грязно

чтобы очистить его, я сделал:

 import re

with open('file.txt', 'r') as filehandle:
    places = [current_place.rstrip() for current_place in filehandle.readlines()]

filtered = [x for x in places if x.strip()]
  

Это дало мне список веб-сайтов (без пробелов между ними), но все еще с примечаниями в той же строке.

Моя цель — сначала получить список «очищенных» веб-сайтов без каких-либо примечаний после слов:

 https://www.website.com/something1/id=39494 
https://www.website2.com/something1/id=596774
  

Для этого я подумал нацелиться на пробел после конца веб-сайта и избавиться от всех послесловий слов:

 for s in filtered:
    f = re.search('s')
  

Это возвращает ошибку, но даже если бы это сработало, это не вернуло бы то, что я думал.

Второй шаг — удалить с веб-сайта некоторые символы и составить его следующим образом: https://www.website.com/embed/id=39494

но это будет позже.

Мне просто интересно, как я могу выполнить первый шаг и избавиться от заметок после веб-сайта и получить чистый список.

Комментарии:

1. Попробуйте with open('file.txt', 'r') as f: for line in f: if line.strip().startswith('http'): print(line.strip().split()[0])

Ответ №1:

Если каждая строка состоит из URL-адреса, за которым следует пробел, и любого другого текста, вы можете просто разделить пробел и взять первый элемент каждой строки:

 urls = []
with open('file.txt') as filehandle:
  for line in filehandle:
    if not line.strip(): continue # skip empty lines
    urls.append(line.split(" ")[0])

# now the variable `urls` should contain all the URLs you are looking for
  

РЕДАКТИРОВАТЬ: второй шаг

 for url in urls:
  print('<iframe src="{}"></iframe>'.format(url))
  

Комментарии:

1. Обратите внимание, что я передал строку с пробелом в split() , но вы также можете опустить это, поскольку это параметр по умолчанию в любом случае. Я добавил это, чтобы быть более явным

2. спасибо, также за второй шаг! Я заметил, что добавление <iframe> находится в print(), можно ли было стабильно записать его в список?

3. @Steven конечно, вы также можете записать HTML в список, одну длинную строку или файл. Во всех этих случаях вы должны принять аргумент print() и использовать функцию добавления списка, конкатенацию строк или функцию записи файла.

Ответ №2:

Вы можете использовать это:

 # to read the lines
with open('file.txt', 'r') as f:
    strlist = f.readlines()
# list to store the URLs
webs = []
for x in strlist:
    webs.append(x.split(' ')[0])
print(webs)
  

Ответ №3:

В случае, если позиция URL не всегда находится в начале строки. Вы можете попробовать

 https?://www.w .com/w /id=(d )
  

затем вы можете использовать обратную ссылку для получения URL-адреса и идентификатора.

Пример кода

 with open('file.txt') as file:
for line in file:
    m = re.match(r'https?://www.w .com/w /id=(d )', line)
    if m:
        print("URL=%s" % m.group(0))
        print("ID=%d" % int(m.group(1)))
  

ДЕМОНСТРАЦИЯ