Pickle vs在python中输出到文件

2024-06-25 22:33:33 发布

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

我有一个程序,输出一些列表,我想存储以后使用。例如,假设它输出一个学生姓名列表和另一个期中成绩列表。我可以通过以下两种方式存储此输出:

标准文件输出方式:

newFile = open('trialWrite1.py','w')
newFile.write(str(firstNames))
newFile.write(str(midterm1Scores))
newFile.close()

泡菜方式:

newFile = open('trialWrite2.txt','w')
cPickle.dump(firstNames, newFile)
cPickle.dump(midterm1Scores, newFile)
newFile.close()

哪种技术更好或更可取?用一个比另一个好吗?

谢谢


Tags: 程序列表close方式opendump学生write
3条回答

pickle更通用——它允许您将许多不同类型的对象转储到一个文件中以供以后使用。缺点是,临时存储不是很可读,也不是标准格式。

另一方面,将字符串写入文件是与其他活动或代码更好的接口。但它的代价是必须再次将文本解析回Python对象。

这两个都很简单(列表?)data;我会使用write( firstNames ),因为不需要使用pickle。一般来说,如何将数据持久化到文件系统取决于数据!


例如,pickle将很高兴地pickle函数,这是不能通过简单地编写字符串表示来实现的。

>>> data = range
<class 'range'>
>>> pickle.dump( data, foo )
# stuff
>>> pickle.load( open( ..., "rb" ) )
<class 'range'.

对于完全不同的方法,请考虑Python ships with SQLite。您可以将数据存储在SQL数据库中,而无需添加任何第三方依赖项。

我认为^{}模块可能非常适合这里,因为CSV是一种标准格式,可以由Python(和许多其他语言)读写,而且它也是人类可读的。用法可以简单到

with open('trialWrite1.py','wb') as fileobj:
    newFile = csv.writer(fileobj)
    newFile.writerow(firstNames)
    newFile.writerow(midterm1Scores)

然而,每行写一个学生,包括他们的名字和分数可能更有意义。可以这样做:

from itertools import izip
with open('trialWrite1.py','wb') as fileobj:
    newFile = csv.writer(fileobj)
    for row in izip(firstNames, midterm1Scores):
        newFile.writerow(row)

相关问题 更多 >