У меня есть программа, которая выводит некоторые списки, которые я хочу сохранить для дальнейшей работы. Например, предположим, что он выводит список имен учеников и другой список их промежуточных оценок. Я могу сохранить эти выходные данные двумя следующими способами:
Стандартный способ вывода файла:
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()
Какой метод лучше или предпочтительнее? Есть ли преимущество использования одного над другим?
Спасибо
Я думаю, что модуль 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)
Для совершенно другого подхода учтите, что Python поставляется с SQLite. Вы можете хранить свои данные в базе данных SQL без добавления каких-либо сторонних зависимостей.
pickle
является более универсальным — он позволяет вам сбрасывать множество различных типов объектов в файл для последующего использования. Минус в том, что промежуточное хранилище не очень удобочитаемо и не в стандартном формате.
С другой стороны, запись строк в файл является гораздо лучшим интерфейсом для других действий или кода. Но это происходит за счет необходимости снова анализировать текст обратно в ваш объект Python.
Оба подходят для этих простых (список?) данных; Я бы использовал write( firstNames )
просто потому, что нет необходимости использовать рассол. В общем, то, как сохранить ваши данные в файловой системе, зависит от данных!
Например, pickle
с удовольствием распарлит функции, чего нельзя сделать, просто написав строковые представления.
>>> data = range
<class 'range'>
>>> pickle.dump( data, foo )
# stuff
>>> pickle.load( open( ..., "rb" ) )
<class 'range'.