удалить все, кроме URL с питоном - PullRequest
0 голосов
/ 15 декабря 2018

У меня есть файл JSON, который содержит метаданные для 900 статей.Я хочу удалить все данные, кроме строк, содержащих URL-адреса, и сохранить файл как .txt.Я создал этот код, но не смог продолжить этап сохранения:

import re

with open("path\url_example.json") as file:
    for line in file:
         urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', line)
         print(urls)

Часть результатов:

['http://www.google.com.']
['https://www.tutorialspoint.com']

Другая проблема заключается в том, что результаты помечены между [' '] иможет закончиться . Мне это не нужно.Мой ожидаемый результат:

 http://www.google.com
 https://www.tutorialspoint.com

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Если вы знаете, по какому ключу ваши URL-адреса будут найдены в вашем JSON, вы можете найти более простой подход - десериализовать JSON с помощью модуля JSON из стандартной библиотеки Python и работать с dict вместо использования regex.

Однако, если вы хотите работать с регулярными выражениями, помните, urls - это список совпадений регулярных выражений.Если вы знаете, что в каждой строке будет определенно только одно совпадение, просто распечатайте первую запись и оторвитесь от терминала «.», Если он там есть.

import re

with open("path\url_example.txt") as file:
    for line in file:
         urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', line)
         print(urls[0].rstrip('.'))

Если вы ожидаете увидеть несколько совпаденийза строку:

import re

with open("path\url_example.txt") as file:
    for line in file:
         urls = re.findall('https?://(?:[-\w.]|(?:%[\da-fA-F]{2}))+', line)
         for url in urls:
             print(url.rstrip('.'))
0 голосов
/ 15 декабря 2018

Без дополнительной информации о файле, который у вас есть (txt, json?) И о типе входной строки, через которую вы проходите цикл, здесь простая попытка без re.findall ().

with open("path\url_example.txt") as handle:
    for line in handle:
        if not re.search('http'):
            continue
        spos = line.find('http')
        epos = line.find(' ', spos)
        url = line[spos:epos]
        print(url)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...