鱼C论坛

 找回密码
 立即注册
查看: 2797|回复: 14

[已解决]小甲鱼老版31讲课后习题

[复制链接]
发表于 2022-11-26 22:03:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题代码如下:
import pickle

def save_file(boy,girl,count):
    file_name_boy = 'boy_'+str(count)+'.txt'
    file_name_girl = 'girl_'+str(count)+'.txt'

    boy_file=open(file_name_boy, 'wb', encoding='utf-8')#记得一定要加b呀
    girl_file=open(file_name_girl, 'wb', encoding='utf-8')#记得一定要加b呀

    pickle.dump(boy, boy_file)
    pickle.dump(girl, girl_file)

    boy_file.close()
    girl_file.close()

def spilt_file(file_name):
    count=1
    boy=[]
    girl=[]

    f=open(file_name)

    for each_line in f:
        if each_line[:6]!='======':
            (role,line_spoken)=each_line.spilt(':',1)
            if role =='小甲鱼':
                boy.append(line_spoken)
            if role=='小客服':
                girl.append(line_spoken)
            else:
                save_file(boy,girl,count)

                boy=[]
                girl=[]
                count+=1

    save_file(boy,girl,count)
    f.close()
   
spilt_file('31.0record.txt')
   
  错误原因:Traceback (most recent call last):
  File "C:\Users\12071\Desktop\py代码\学习代码\31.0腌制聊天记录.py", line 40, in <module>
    spilt_file('31.0record.txt')
  File "C:\Users\12071\Desktop\py代码\学习代码\31.0腌制聊天记录.py", line 23, in spilt_file
    for each_line in f:
UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 14: illegal multibyte sequence
         

求大佬解答!!!
   
        
最佳答案
2022-11-26 22:30:33
def spilt_file(file_name):
    count=1
    boy=[]
    girl=[]

    f=open(file_name , encoding = 'UTF-8')  # 改这一句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-26 22:28:16 | 显示全部楼层
f=open(file_name)
改为
f=open(file_name, "r", encoding="utf-8")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-26 22:30:33 | 显示全部楼层    本楼为最佳答案   
def spilt_file(file_name):
    count=1
    boy=[]
    girl=[]

    f=open(file_name , encoding = 'UTF-8')  # 改这一句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-26 22:30:48 | 显示全部楼层
本帖最后由 lxping 于 2022-11-26 22:32 编辑

  f=open(file_name) 未指定编码格式,改成  f=open(file_name, encoding='utf-8'),txt文档的默认编码格式就是'utf-8',打开txt文档,他的右下角就有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-26 23:12:18 | 显示全部楼层
本帖最后由 jackz007 于 2022-11-26 23:15 编辑
import pickle
import os

def save_file(boy , girl , count) : 
    fn = 'data_' + str(count) + '.pkl'
    fp = open(fn , 'wb')
    pickle . dump((boy , girl) , fp)
    fp . close()
    fn = 'boy_' + str(count) + '.txt'    
    with open(fn , 'wt') as fp : fp . writelines(boy)
    fn = 'girl_' + str(count) + '.txt'    
    with open(fn , 'wt') as fp : fp . writelines(girl) 

def load_file(count) :
    boy , girl = None , None
    fn = 'data_' + str(count) + '.pkl'
    if os . path . exists(fn) and os . path . isfile(fn):
        fp = open(fn , 'rb')
        boy , girl = pickle . load(fp)
        fp . close()
    return boy , girl

def spilt_file(file_name):
    count = 1
    boy = []
    girl = []

    f = open(file_name , encoding = 'UTF-8')                   # 【编码选项】
    for each_line in f:
        if each_line[: 6] != '======':
            (role , line_spoken) = each_line . split(':' , 1)  # 【拼写错误】split()
            if role == '小甲鱼':
                boy . append(line_spoken)
            if role == '小客服':
                girl . append(line_spoken)
        else :                                                 # 【缩进错误】
            save_file(boy , girl , count)
            boy = []
            girl = []
            count += 1

    save_file(boy , girl , count)
    f . close()

spilt_file('31.0record.txt')
i = 1
while True :                                                    # 从 pickle 文件加载对象,并进行显示
    a , b = load_file(i)
    if a and b :
        print('[boy] :')
        for x in a : print(x , end = '')
        print()
        print('[girl] :') 
        for x in b : print(x , end = '')         
        print()
    else : break
    print()
    i += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-27 16:56:29 | 显示全部楼层

你好   我的这个问题是解决了   但是运行之后男女各出现了5个文件但是我的原txt中只有一行=号
请问这是啥情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-27 17:00:36 | 显示全部楼层
1207139945 发表于 2022-11-27 16:56
你好   我的这个问题是解决了   但是运行之后男女各出现了5个文件但是我的原txt中只有一行=号
请问这是 ...

        你是说 'record.txt' 中只有 1 行 '############' ?
        把文件的全部内容都贴出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-27 17:14:16 | 显示全部楼层
新人报道
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-27 17:46:40 | 显示全部楼层
jackz007 发表于 2022-11-27 17:00
你是说 'record.txt' 中只有 1 行 '############' ?
        把文件的全部内容都贴出来

小甲鱼:一二三
小客服:七八九
小甲鱼:七八九
小客服:一二三
===============================================
小甲鱼:二五八
小客服:三六九
小甲鱼:三六九
小客服:二五八
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-27 17:55:53 | 显示全部楼层
1207139945 发表于 2022-11-27 17:46
小甲鱼:一二三
小客服:七八九
小甲鱼:七八九


       你得把文件中所有 "小甲鱼:"、"小客服:" 后面的 ":" (中文冒号)改为 ":" (西文冒号),否则,程序无法正常运行,除非,你把我代码 31 行中的 split(":" , 1) 里面的西文冒号也改为中文冒号split(":" , 1) 也行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-27 18:00:38 | 显示全部楼层
jackz007 发表于 2022-11-27 17:55
你得把文件中所有 "小甲鱼:"、"小客服:" 后面的 ":" (中文冒号)改为 ":" (西文冒号),否 ...

对的   这个我改过了   程序能运行但是生成的文件过多
男女各五个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-27 18:12:35 From FishC Mobile | 显示全部楼层
1207139945 发表于 2022-11-27 18:00
对的   这个我改过了   程序能运行但是生成的文件过多
男女各五个文件

      世界上没有无缘无故的事情,尤其是写程序,可以断言,你的 'record.txt 中,一定有 4 行,而不是 1 行 '=' 行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-27 20:54:45 | 显示全部楼层
jackz007 发表于 2022-11-27 18:12
世界上没有无缘无故的事情,尤其是写程序,可以断言,你的 'record.txt 中,一定有 4 行,而不是 1 ...

上面这个就是源文件内容     我就是纳闷一行等号为啥这样分割    难搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-27 21:05:46 | 显示全部楼层
1207139945 发表于 2022-11-27 20:54
上面这个就是源文件内容     我就是纳闷一行等号为啥这样分割    难搞

         注意我代码的第 36 行,有指出你的代码有缩进错误,如果不改,就会产生很多文件,你肯定没有用我改的版本运行。用你的也可以,重点查一下和我代码 36 行相同的那个 else 的缩进位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-28 18:37:34 | 显示全部楼层
jackz007 发表于 2022-11-27 21:05
注意我代码的第 36 行,有指出你的代码有缩进错误,如果不改,就会产生很多文件,你肯定没有用 ...

谢谢啦   就是这个缩进问题被我忽略了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表