我是编程初学者,决定自学 Python。几天后,我决定编写一小段代码。我很简单:
- 今天的日期
- 我所在的页面(我正在看书)
- 我的感受
- 然后我将数据添加到一个文件中。每次启动程序时,它都会在文件中添加一行新数据
- 然后我提取数据以制作列表列表。
事实是,我想重写我的程序以便 pickle 列表然后取消 pickle 文件。但是,由于我正在处理我无法处理的错误,我真的很想了解如何解决这个问题。因此,我希望你能帮助我 :)
在过去的几个小时里,我一直在为这个看似简单而愚蠢的问题而苦苦挣扎。虽然我没有找到解决方案。这是错误和代码:
错误:
Traceback (most recent call last):
File "dailyshot.py", line 25, in <module>
SaveData(todaysline)
File "dailyshot.py", line 11, in SaveData
mon_pickler.dump(datatosave)
TypeError: must be str, not bytes
代码:
import pickle
import datetime
def SaveData(datatosave):
with open('journey.txt', 'wb') as thefile:
my_pickler = pickle.Pickler(thefile)
my_pickler.dump(datatosave)
thefile.close()
todaylist = []
today = datetime.date.today()
todaylist.append(today)
page = input('Page Number?\n')
feel = input('How do you feel?\n')
todaysline = today.strftime('%d, %b %Y') + "; " + page + "; " + feel + "\n"
print('Thanks and Good Bye!')
SaveData(todaysline)
print('let\'s make a list now...')
thefile = open('journey.txt','rb')
thelist = [line.split(';') for line in thefile.readlines()]
thefile.close()
print(thelist)
非常感谢!
请您参考如下方法:
好的,这里有几件事要评论:
当您使用
with语句时,您不必显式关闭文件。 Python 将在withblock (第 8 行)的末尾为您执行此操作。您不使用
todayList做任何事情。您创建它,添加一个元素,然后丢弃它。所以它可能没用:)为什么要 pickle 字符串对象?如果您有字符串,只需按原样将它们写入文件。
如果您在写入时对数据进行 pickle,则必须在读取时对其进行 unpickle。您不应该编写 pickled 数据,然后将文件作为纯文本文件读取。
当您只是向文件中添加项目时,使用
a进行追加,w将覆盖您的整个文件。
我的建议是编写一个纯文本文件,其中每一行都是一个条目。
import datetime
def save(data):
with open('journey.txt', 'a') as f:
f.write(data + '\n')
today = datetime.date.today()
page = input('Page Number: ')
feel = input('How do you feel: ')
todaysline = ';'.join([today.strftime('%d, %b %Y'), page, feel])
print('Thanks and Good Bye!')
save(todaysline)
print('let\'s make a list now...')
with open('journey.txt','r') as f:
for line in f:
print(line.strip().split(';'))
