Как разделить текст из Интернета на новые строки в Python?

#python

Вопрос:

Я пытаюсь прочитать полный текст из тома 1 проекта «Гутенберг отверженные» по следующему адресу.

http://corpus-db.org/api/id/17489/fulltext

Я хочу разделить этот текст на строки, прежде чем работать с ним дальше. Мой код для выполнения этой задачи следующий:

 import urllib.request
def get_les_mis():
    url = "http://corpus-db.org/api/id/17489/fulltext"
    try:
        with urllib.request.urlopen(url) as f:
            text = (f.read().decode('utf-8'))
            lines = text.splitlines()
            for line in lines:
                print(line)
    except urllib.error.URLError as e:
        print(e.reason)
 

К сожалению, когда я тестирую эту функцию в терминале, выводится один список, содержащий всю строку, включая множество символов новой строки. Функция splitlines, похоже, не работает.
Проницательность была бы очень признательна — я действительно в тупике.

Я также попытался использовать функцию split() с «n» в качестве разделителя — это дало тот же результат.

Изменить: Вот пример выходных данных.

 nJean Valjean avait laissé, le plus d'argent possible aux pauvres. Aprèsntout, de qui s'agissait-il? d'un forçat et d'une fille publique. C'estnpourquoi il simplifia l'enterrement de Fantine, et le réduisit à censtrict nécessaire qu'on appelle la fosse commune.nnFantine fut donc enterrée dans ce coin gratis du cimetière qui est àntous et à personne, et où l'on perd les pauvres. Heureusement Dieu saitnoù retrouver l'âme. On coucha Fantine dans les ténèbres parmi lesnpremiers os venus; elle subit la promiscuité des cendres. Elle fut jetéenà la fosse publique. Sa tombe ressembla à son lit.nnnnn","id":"17489"}]
 

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

1. Вероятно, потому, что вы печатаете их в одну строку. Если вы хотите проверить, есть ли в списке разные элементы, вы можете, например, добавить «n «в инструкцию «печать».

2. Основываясь на этом примере из W3Schools, среди прочего, если функция работала правильно, символы новой строки не должны быть видны. w3schools.com/python/… Печать строк в целом дает тот же результат.

3. Я также напечатал длину строк и получил 1

Ответ №1:

Когда я перехожу по этому URL-адресу, я вижу, что он загружает содержимое в виде обычного текста, даже если он выглядит как объект JSON. Следовательно , in get_les_mis() text возвращается в виде строки.

Возможно, вы захотите попробовать загрузить его в формате JSON:

 import urllib.request
import json

def get_les_mis():
    url = "http://corpus-db.org/api/id/17489/fulltext"
    try:
        with urllib.request.urlopen(url) as f:
            text = (f.read().decode('utf-8'))

            # load the text as a JSON object here
            text_json_obj = json.loads(text)
            
            # convert lines into a list of 14K elements (split on 'n')
            lines = text_json_obj[0]['text'].split('n')
            for line in lines:
                print(line)
    except urllib.error.URLError as e:
        print(e.reason)

 

Смотрите отладку переменной lines ниже

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

1. Большое вам спасибо! В этом был смысл! Теперь я понимаю значение скобок в начале и конце текста.

Ответ №2:

ваши данные являются объектом json, сначала прочитайте их как json

   with urllib.request.urlopen(url) as f:
        import json
        text = f.read().decode('utf-8')
        data = json.loads(text)
        lines = data[0]['text'].splitlines()
        for line in lines:
            print(line)