与终端输出相比,保存到文件时使用pickle的输出很奇怪

2024-04-29 16:16:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我今天早上学会了如何用pickle把列表转储到一个你不能用的文本文件bc中。我正在youtube上看一个视频,用Python和nltkp.4进行自然语言处理。您可以看到完整的输出应该是什么。他没有将数据推送到txt文件,但我想进一步了解更多。你知道吗

样品端子输出: [('PRESIDENT','NNP'),('GEORGE','NNP'),('W','NNP'),('BUSH','NNP'), (“'S”,'POS')注:假设整个演讲都是这样,在终端中也会这样。你知道吗

完整文件输出: €]q(X(qh†qX ApplauseqX NNPq†qX.qh†qX)qh†q e

我的代码:

import nltk
from nltk.corpus import state_union
from nltk.tokenize import PunktSentenceTokenizer
import pickle

output = open('stoutput.txt', 'wb')
train_text = state_union.raw('2005-GWBush.txt')
sample_text = state_union.raw('2006-GWBush.txt')

custom_sent_tokenizer = PunktSentenceTokenizer(train_text)

tokenized = custom_sent_tokenizer.tokenize(sample_text)

def process_content():

    try:
        for i in tokenized:
            words = nltk.word_tokenize(i)
            tagged = nltk.pos_tag(words)
            print(tagged)
            pickle.dump(tagged, open('stoutput.txt', 'wb'))
    except Exception as e:
           pickle.dump(e, open('stoutput.txt', 'wb'))
           print(str(e))


process_content()

任何帮助都非常感谢,因为我知道这需要时间。谢谢你的阅读。你知道吗


Tags: textimporttxtopenpicklestateunionqx
1条回答
网友
1楼 · 发布于 2024-04-29 16:16:52

pickle用于序列化Python对象,taged是一个list对象,因此您看到的是强制为字符编码的列表的字节流表示,这解释了为什么字符串'palaude'和'NNP'(列表元素)被一堆乱七八糟的信息包围。如果您想要print(l)得到的表示,那么忘记pickle并将列表强制写入字符串

with open('stoutput.txt', 'wb') as f:
    f.write(str(tagged))

尽管您可能希望with语句位于for循环之外。你知道吗

编辑:如果您的目标是能够在以后的Python会话或脚本中使用此数据,但您希望它的可读性比pickle提供的更高,我建议您将列表转换为CSV,请参见this question以获取说明。你知道吗

相关问题 更多 >