Как избежать «& # 8217;» «& # 8220;», когда я использовал gzip.open () в python

1

Я совершенно новичок в Python, и когда я использую gzip.open() для работы с файлом .gz, я получаю несколько кодов, таких как "It’s one of those great ensemble casts that’s incredibly balanced".

Как я могу справиться с этим? Код, который я использую:

def _review_reader(file_path):
    gz = gzip.open(file_path)
    for l in gz:
        yield eval(l)

файл сжат из файла JSON

лайк:

{"reviewerID": "A11N155CW1UV02", "asin": "B000H00VBQ", "reviewerName": "AdrianaM", "helpful": [0, 0], "reviewText": "I had big expectations because I love English TV, in particular Investigative and detective stuff but this guy is really boring. It didn\'t appeal to me at all.", "overall": 2.0, "summary": "A little bit boring for me", "unixReviewTime": 1399075200, "reviewTime": "05 3, 2014"}\n
{"reviewerID": "A3BC8O2KCL29V2", "asin": "B000H00VBQ", "reviewerName": "Carol T", "helpful": [0, 0], "reviewText": "I highly recommend this series. It is a must for anyone who is yearning to watch \\"grown up\\" television. Complex characters and plots to keep one totally involved. Thank you Amazin Prime.", "overall": 5.0, "summary": "Excellent Grown Up TV", "unixReviewTime": 1346630400, "reviewTime": "09 3, 2012"}\n
....

и я хочу получить текст обзора, но есть код, подобный ’

  • 2
    Для чего eval(l) ? Вы должны быть очень осторожны при использовании этой функции вообще, и это почти наверняка неправильно в этой ситуации. Используйте yield l или, что еще лучше, замените весь цикл for на yield from gz .
  • 2
    При этом файл содержит HTML. И чтобы интерпретировать это вам нужно использовать HTML-парсер. Покажите больше входного файла (распакованного!) И объясните, каким должен быть ваш конечный результат для данного примера.
Показать ещё 5 комментариев
Теги:

1 ответ

0
Лучший ответ

Поскольку вы смотрите на данные JSON, используйте для их загрузки анализатор Python JSON. Он будет автоматически обрабатывать любые встроенные экранированные символы, такие как \n или \".

При чтении из файла gzip важно понимать, что gzip дает вам необработанные байты. Эти байты должны быть явно настроены на текст путем вызова .decode(), и для того, чтобы сделать это правильно, вам нужно знать, какая кодировка текста использовалась для JSON. UTF-8 - довольно безопасное предположение по умолчанию, но это может быть что-то другое, в зависимости от того, что было выбрано при записи файла .gz.

После анализа JSON вы можете получить доступ к свойствам по их имени:

import json
import gzip

def _review_reader(file_path, encoding="utf8"):
    with gzip.open(file_path, "rb") as f:
        json_text = f.read().decode(encoding)
        return json.loads(json_text)

for review in _review_reader(file_path):
    print(review['reviewText'])

Если reviewText содержит HTML-код вместо обычного текста, может потребоваться еще один шаг - синтаксический анализ HTML. Модуль lxml может помочь:

from lxml import etree

# ...

for review in _review_reader(file_path):
    text = review['reviewText']
    tree = etree.fromstring("<html>" + text + "</html>")
    print(tree.text)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню