gpt4 book ai didi

Python:数据到文件然后数据从文本文件到列表 - TypeError:必须是 str,而不是字节

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:59 25 4
gpt4 key购买 nike

我是编程初学者,决定自学 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)

非常感谢!

最佳答案

好的,这里有几件事要评论:

  1. 当您使用with 语句时,您不必显式关闭文件。 Python 将在 with block (第 8 行)的末尾为您执行此操作。

  2. 您不使用 todayList 做任何事情。您创建它,添加一个元素,然后丢弃它。所以它可能没用:)

  3. 为什么要 pickle 字符串对象?如果您有字符串,只需按原样将它们写入文件。

  4. 如果您在写入时对数据进行 pickle,则必须在读取时对其进行 unpickle。您不应该编写 pickled 数据,然后将文件作为纯文本文件读取。

  5. 当您只是向文件中添加项目时,使用 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(';'))

关于Python:数据到文件然后数据从文本文件到列表 - TypeError:必须是 str,而不是字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18288176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com