Pickle против вывода в файл на 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()

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

Спасибо

10
задан Justin Ethier 27 August 2010 в 20:55
поделиться

3 ответа

Я думаю, что модуль 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)
6
ответ дан 4 December 2019 в 01:54
поделиться

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

0
ответ дан 4 December 2019 в 01:54
поделиться

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

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

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


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

>>> data = range
<class 'range'>
>>> pickle.dump( data, foo )
# stuff
>>> pickle.load( open( ..., "rb" ) )
<class 'range'.
3
ответ дан 4 December 2019 в 01:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: