#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)))