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

Python 与终端输出相比,在保存到文件时使用pickle进行奇怪的输出,python,python-3.x,nltk,pickle,Python,Python 3.x,Nltk,Pickle,所以我今天早上学会了如何使用pickle将列表转储到一个文本文件bc中,而你不能使用它。我正在youtube上看一个视频,用Python和NLTK p.4进行自然语言处理。您可以看到完整的输出应该是什么。他没有将数据推送到txt文件,但我想进一步了解更多 样本终端输出: [总统','北朝鲜','乔治','北朝鲜','西朝鲜','北朝鲜','布什','北朝鲜', 'S,'POS'注:假设在整个演讲中都是这样,在终端中也是这样 完整文件输出: 欧元]qX qh†qX掌声qX NNPq†qX.qh†q

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

样本终端输出: [总统','北朝鲜','乔治','北朝鲜','西朝鲜','北朝鲜','布什','北朝鲜', 'S,'POS'注:假设在整个演讲中都是这样,在终端中也是这样

完整文件输出: 欧元]qX qh†qX掌声qX NNPq†qX.qh†qX qh†QE

我的代码:

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()
非常感谢您的帮助,因为我知道这需要时间。感谢阅读。

pickle用于序列化Python对象,而taged是一个list对象,因此您看到的是强制为字符编码的列表的字节流表示,这解释了为什么列表中的字符串“paird”和“NNP”元素被一堆乱七八糟的东西包围。如果您想要使用printl获得的表示,那么请忘记pickle并将列表强制写入字符串

with open('stoutput.txt', 'wb') as f:
    f.write(str(tagged))
尽管您可能希望with语句位于for循环之外


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

将Python对象转换为字符串而不首先序列化它的错误建议。用户以后必须使用eval来读取文件,这可能会导致很多问题…@alvas你是对的,我仓促假设提问者只是想读取文件,而不是加载回python