Python:数据到文件,然后从文本文件到列表类型错误:必须是str,而不是字节

2024-09-27 21:25:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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

代码:

^{pr2}$

多谢了!在


Tags: 文件数据代码inpy程序列表编程
2条回答

好吧,这里有几点需要评论:

  1. 使用with语句时,不必显式关闭文件。Python将在with块的末尾(第8行)为您完成这项工作。

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

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

  4. 如果你在写时对数据进行pickle,那么在读的时候就必须取消pickle。您不应该先写入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(';'))

你确定你发布了正确的密码吗?如果在打开文件时漏掉了“b”,则可能会出现该错误

例如

with open('journey.txt', 'w') as thefile:

>>> with open('journey.txt', 'w') as thefile:
...    pickler = pickle.Pickler(thefile)
...    pickler.dump("some string")
... 
Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
TypeError: must be str, not bytes

该文件应以二进制模式打开

^{pr2}$

相关问题 更多 >

    热门问题