无法加载pickle文件。我正在使用python 3.5
import pickle
data=pickle.load(open("D:\\ud120-projects\\final_project\\final_project_dataset.pkl", "r"))
TypeError:需要类似字节的对象,而不是'str'
。
也尝试过:
import pickle
data=pickle.load(open("D:\\ud120-projects\\final_project\\final_project_dataset.pkl", "rb"))
UnpicklingError:必须引用STRING操作码参数
。
即使使用with语句
也会出现相同的错误import pickle
with open("D:\\ud120-projects\\final_project\\final_project_dataset.pkl", "rb") as f:
enron_data = pickle.load(f)
答案 0 :(得分:2)
我正在使用Windows 10和vscode,您应该转到final_project_dataset.pkl文件,然后将选项 CRLF更改为LF ,然后保存文件,然后UnpicklingError: the STRING opcode argument must be quoted
错误将消失
将CRLF更改为LF
然后保存final_project_dataset.pkl文件。
答案 1 :(得分:1)
你肯定需要“rb”来读取文件,这解决了第一个问题。
第二个问题(STRING操作码参数)是因为该文件没有Unix行结尾。您需要通过脚本运行pkl文件来转换它们。如果你看到这个帖子,有一个名为“dos2unix”的脚本可以解决这个问题:
How to convert DOS/Windows newline (CRLF) to Unix newline (\n) in a Bash script?
答案 2 :(得分:1)
如果整个脚本使您失望,那么它实际上只值得一行:
SELECT categories.id, categories.description, initiatives.id, initiatives.description, initiativegroups.group
FROM categories
LEFT JOIN category_initiative ON categories.id = category_initiative.category_id
LEFT JOIN initiatives ON category_initiative.initiative_id = initiatives.id
LEFT JOIN initiativegroups ON initiatives.initiativegroup_id = initiativegroups.id
WHERE categories.id = '40'
答案 3 :(得分:0)
" pickle文件必须使用Unix新行,否则至少Python 3.4的C pickle解析器失败,异常:pickle.UnpicklingError:必须引用STRING操作码参数 我认为一些git版本可能会将Unix新行(' \ n')更改为DOS行(' \ r \ n')。
您可以使用此代码更改" word_data.pkl" to" word_data_unix.pkl"然后在脚本上使用新的.pkl文件" nb_author_id.py": dos2unix.txt
#!/usr/bin/env python
"""
convert dos linefeeds (crlf) to unix (lf)
usage: dos2unix.py
"""
original = "word_data.pkl"
destination = "word_data_unix.pkl"
content = ''
outsize = 0
with open(original, 'rb') as infile:
content = infile.read()
with open(destination, 'wb') as output:
for line in content.splitlines():
outsize += len(line) + 1
output.write(line + str.encode('\n'))
print("Done. Saved %s bytes." % (len(content)-outsize))
dos2unix.py addapted from: http://stackoverflow.com/a/19702943
我发现的小调整是,改变" r"模式到" rb"字节对象模式。 最后使用上面的python脚本转换所有.pkl文件,从Dos转换为Unix!
回答链接:https://github.com/udacity/ud120-projects/issues/46 完全信用:Monkshow92