“如何逃离”’&引用&引用“&引用;当我在python中使用gzip.open()时

“如何逃离”’&引用&引用“&引用;当我在python中使用gzip.open()时,python,Python,我对Python完全陌生,当我使用gzip.open()来处理.gz文件时,我会得到一些代码,比如“它是一个非常好的集成强制转换,非常平衡” 我该怎么处理呢?我使用的代码是: def _review_reader(file_path): gz = gzip.open(file_path) for l in gz: yield eval(l) 该文件是从json文件压缩而来的 比如: 我想得到评论文本,但是有一些代码,比如’因为您正在查看JSON数据,所

我对Python完全陌生,当我使用
gzip.open()
来处理.gz文件时,我会得到一些代码,比如
“它是一个非常好的集成强制转换,非常平衡”

我该怎么处理呢?我使用的代码是:

def _review_reader(file_path):
    gz = gzip.open(file_path)
    for l in gz:
        yield eval(l)
该文件是从json文件压缩而来的

比如:


我想得到评论文本,但是有一些代码,比如

因为您正在查看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解析。可以帮助:

from lxml import etree

# ...

for review in _review_reader(file_path):
    text = review['reviewText']
    tree = etree.fromstring("<html>" + text + "</html>")
    print(tree.text)
从lxml导入etree
# ...
对于_review_reader(文件路径)中的审阅:
text=review['reviewText']
tree=etree.fromstring(“+text+”)
打印(tree.text)

由于您正在查看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解析。这有助于:

from lxml import etree

# ...

for review in _review_reader(file_path):
    text = review['reviewText']
    tree = etree.fromstring("<html>" + text + "</html>")
    print(tree.text)
从lxml导入etree
# ...
对于_review_reader(文件路径)中的审阅:
text=review['reviewText']
tree=etree.fromstring(“+text+”)
打印(tree.text)

eval(l)
用于什么?您应该非常小心地使用这个函数,在这种情况下,它几乎肯定是错误的。使用
yield l
,或者更好的是,将整个
for
循环替换为
yield from gz
。也就是说,该文件包含HTML。为了解释这一点,您需要使用HTML解析器。显示更多(解压!)输入文件,并解释给定示例的最终结果。emmm。。我正在尝试更新这个问题。如果您使用
gunzip
创建输入文件的未压缩版本,然后使用
gz=open(gunzipped\u file\u path)
,那么为什么这是一个关于
gzip.open()
的问题呢?构建a的一部分是使其最小化——找到重现问题所需的最小环境集
。既然是JSON,就使用JSON解析器(请参阅)。eval(l)
的作用是什么?您应该非常小心地使用这个函数,在这种情况下,它几乎肯定是错误的。使用
yield l
,或者更好的是,将整个
for
循环替换为
yield from gz
。也就是说,该文件包含HTML。为了解释这一点,您需要使用HTML解析器。显示更多(解压!)输入文件,并解释给定示例的最终结果。emmm。。我正在尝试更新这个问题。如果您使用
gunzip
创建输入文件的未压缩版本,然后使用
gz=open(gunzipped\u file\u path)
,那么为什么这是一个关于
gzip.open()
的问题呢?构建a的一部分是使其最小化——找到重现问题所需的最小环境集
。由于它是JSON,请使用JSON解析器(请参阅)。