加载腌制文件时出错
Error loading pickled file
我在 python3 中加载腌制文件时遇到问题。见以下代码:
#!/usr/bin/env python3
import csv,operator
import pickle
import os.path
pathToBin = "foo/bar/foobar.bin"
pathToCSV = "foo/bar/foobar.csv"
if os.path.isfile(pathToBin):
print("Binary file already on harddrive, loading from there")
transactions = pickle.loads( open( pathToBin, "rb" ))
else:
csvIn = open(pathToCSV,'r')
reader = csv.reader(csvIn)
header = next(reader)
header = header[0].split(";")
print("Reading file")
transactions = []
for row in reader:
# read file.
# transactions contains now lists of strings: transactions = [ ["a","b","c"], ["a2","b2","c3"], ...]
print("Dumping python file to harddrive")
myPickleFile = open(pathToBin,'wb')
pickle.dump(transactions, myPickleFile, protocol=pickle.HIGHEST_PROTOCOL)
# do some more computation
保存文件没有任何问题。但是,加载它会给我以下错误:
transactions = pickle.loads( open( pathToBin, "rb" ))
TypeError: '_io.BufferedReader' does not support the buffer interface
自从我使用 python3 以来,字符串的处理方式有所不同。因此,我专门为 saving/loading 提供了 "b" 选项。有人知道为什么这行不通吗?
您想使用 load
:
transactions = pickle.load(open( pathToBin, "rb" ))
从您打开的文件句柄中读取。 loads
接受 bytes
而不是文件句柄(意味着:加载 "string",现在在 python 3 升级 string/bytes 处理后加载 "bytes":
transactions = pickle.loads(open( pathToBin, "rb" ).read())
读取文件返回的字节。
在这种情况下,我会为您推荐第一个选项。第二个选项适用于更复杂的情况。
旁白:最好使用 with
上下文来控制文件何时关闭
with open( pathToBin,"rb") as f:
transactions = pickle.load(f)
我在 python3 中加载腌制文件时遇到问题。见以下代码:
#!/usr/bin/env python3
import csv,operator
import pickle
import os.path
pathToBin = "foo/bar/foobar.bin"
pathToCSV = "foo/bar/foobar.csv"
if os.path.isfile(pathToBin):
print("Binary file already on harddrive, loading from there")
transactions = pickle.loads( open( pathToBin, "rb" ))
else:
csvIn = open(pathToCSV,'r')
reader = csv.reader(csvIn)
header = next(reader)
header = header[0].split(";")
print("Reading file")
transactions = []
for row in reader:
# read file.
# transactions contains now lists of strings: transactions = [ ["a","b","c"], ["a2","b2","c3"], ...]
print("Dumping python file to harddrive")
myPickleFile = open(pathToBin,'wb')
pickle.dump(transactions, myPickleFile, protocol=pickle.HIGHEST_PROTOCOL)
# do some more computation
保存文件没有任何问题。但是,加载它会给我以下错误:
transactions = pickle.loads( open( pathToBin, "rb" ))
TypeError: '_io.BufferedReader' does not support the buffer interface
自从我使用 python3 以来,字符串的处理方式有所不同。因此,我专门为 saving/loading 提供了 "b" 选项。有人知道为什么这行不通吗?
您想使用 load
:
transactions = pickle.load(open( pathToBin, "rb" ))
从您打开的文件句柄中读取。 loads
接受 bytes
而不是文件句柄(意味着:加载 "string",现在在 python 3 升级 string/bytes 处理后加载 "bytes":
transactions = pickle.loads(open( pathToBin, "rb" ).read())
读取文件返回的字节。
在这种情况下,我会为您推荐第一个选项。第二个选项适用于更复杂的情况。
旁白:最好使用 with
上下文来控制文件何时关闭
with open( pathToBin,"rb") as f:
transactions = pickle.load(f)