Cur*_*arn 10 python file-io pickle
我有一个程序输出一些我想要存储的列表以便以后使用.例如,假设它输出学生姓名列表和其他中期分数列表.我可以通过以下两种方式存储此输出:
标准文件输出方式:
newFile = open('trialWrite1.py','w')
newFile.write(str(firstNames))
newFile.write(str(midterm1Scores))
newFile.close()
Run Code Online (Sandbox Code Playgroud)
泡菜方式:
newFile = open('trialWrite2.txt','w')
cPickle.dump(firstNames, newFile)
cPickle.dump(midterm1Scores, newFile)
newFile.close()
Run Code Online (Sandbox Code Playgroud)
哪种技术更好还是首选?使用一个优于另一个有优势吗?
谢谢
我认为这个csv模块可能非常合适,因为CSV是一种标准格式,可以由Python(以及许多其他语言)读取和写入,并且它也是人类可读的.用法可以很简单
with open('trialWrite1.py','wb') as fileobj:
newFile = csv.writer(fileobj)
newFile.writerow(firstNames)
newFile.writerow(midterm1Scores)
Run Code Online (Sandbox Code Playgroud)
但是,每行写一个学生可能更有意义,包括他们的名字和分数.这可以这样做:
from itertools import izip
with open('trialWrite1.py','wb') as fileobj:
newFile = csv.writer(fileobj)
for row in izip(firstNames, midterm1Scores):
newFile.writerow(row)
Run Code Online (Sandbox Code Playgroud)
pickle更通用——它允许您将许多不同类型的对象转储到文件中以供以后使用。缺点是临时存储不太可读,并且不是标准格式。
另一方面,将字符串写入文件是与其他活动或代码更好的接口。但这是以必须再次将文本解析回 Python 对象为代价的。
对于这个简单的(列表?)数据来说,两者都很好;我会使用write( firstNames )只是因为不需要使用泡菜。一般来说,如何将你的数据持久化到文件系统取决于数据!
例如,pickleWill 很乐意 pickle 函数,而这是您无法通过简单地编写字符串表示来完成的。
>>> data = range
<class 'range'>
>>> pickle.dump( data, foo )
# stuff
>>> pickle.load( open( ..., "rb" ) )
<class 'range'.
Run Code Online (Sandbox Code Playgroud)