#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)
Комментарии:
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)