Pickle против вывода в файл в Python - PullRequest
10 голосов
/ 28 августа 2010

У меня есть программа, которая выводит некоторые списки, которые я хочу сохранить для дальнейшей работы. Например, предположим, что он выводит список имен учеников и другой список их промежуточных оценок. Я могу сохранить эти выходные данные двумя способами:

Стандартный способ вывода файла:

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()

Какая техника лучше или предпочтительнее? Есть ли преимущество использования одного над другим?

Спасибо

Ответы [ 3 ]

6 голосов
/ 28 августа 2010

Я думаю, что модуль csv вполне подойдет для этого, поскольку 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)
3 голосов
/ 28 августа 2010

pickle является более общим - он позволяет вам выгружать много разных типов объектов в файл для последующего использования.Недостатком является то, что временное хранилище не очень удобочитаемо и не в стандартном формате.

Запись строк в файл, с другой стороны, является гораздо лучшим интерфейсом для других действий или кода.Но это происходит за счет необходимости снова анализировать текст в вашем объекте Python.

Оба хороши для этих простых (список?) Данных;Я бы использовал write( firstNames ) просто потому, что нет необходимости использовать рассол.В общем, как сохранить ваши данные в файловой системе, зависит от данных!


Например, pickle удачно выберет функции, которые вы не можете сделать, просто записав строковые представления.

>>> data = range
<class 'range'>
>>> pickle.dump( data, foo )
# stuff
>>> pickle.load( open( ..., "rb" ) )
<class 'range'.
0 голосов
/ 28 августа 2010

Для совершенно другого подхода учтите, что Python поставляется с SQLite .Вы можете хранить свои данные в базе данных SQL без добавления сторонних зависимостей.

...