小甲鱼老版31讲课后习题
问题代码如下: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
求大佬解答!!!
f=open(file_name)
改为
f=open(file_name, "r", encoding="utf-8") def spilt_file(file_name):
count=1
boy=[]
girl=[]
f=open(file_name , encoding = 'UTF-8')# 改这一句 本帖最后由 lxping 于 2022-11-26 22:32 编辑
f=open(file_name) 未指定编码格式,改成f=open(file_name, encoding='utf-8'),txt文档的默认编码格式就是'utf-8',打开txt文档,他的右下角就有 本帖最后由 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(' :')
for x in a : print(x , end = '')
print()
print(' :')
for x in b : print(x , end = '')
print()
else : break
print()
i += 1 jackz007 发表于 2022-11-26 22:30
你好 我的这个问题是解决了 但是运行之后男女各出现了5个文件但是我的原txt中只有一行=号
请问这是啥情况 1207139945 发表于 2022-11-27 16:56
你好 我的这个问题是解决了 但是运行之后男女各出现了5个文件但是我的原txt中只有一行=号
请问这是 ...
你是说 'record.txt' 中只有 1 行 '############' ?
把文件的全部内容都贴出来 新人报道 jackz007 发表于 2022-11-27 17:00
你是说 'record.txt' 中只有 1 行 '############' ?
把文件的全部内容都贴出来
小甲鱼:一二三
小客服:七八九
小甲鱼:七八九
小客服:一二三
===============================================
小甲鱼:二五八
小客服:三六九
小甲鱼:三六九
小客服:二五八 1207139945 发表于 2022-11-27 17:46
小甲鱼:一二三
小客服:七八九
小甲鱼:七八九
你得把文件中所有 "小甲鱼:"、"小客服:" 后面的 ":" (中文冒号)改为 ":" (西文冒号),否则,程序无法正常运行,除非,你把我代码 31 行中的 split(":" , 1) 里面的西文冒号也改为中文冒号split(":" , 1) 也行。 jackz007 发表于 2022-11-27 17:55
你得把文件中所有 "小甲鱼:"、"小客服:" 后面的 ":" (中文冒号)改为 ":" (西文冒号),否 ...
对的 这个我改过了 程序能运行但是生成的文件过多
男女各五个文件{:5_107:} 1207139945 发表于 2022-11-27 18:00
对的 这个我改过了 程序能运行但是生成的文件过多
男女各五个文件
世界上没有无缘无故的事情,尤其是写程序,可以断言,你的 'record.txt 中,一定有 4 行,而不是 1 行 '=' 行。 jackz007 发表于 2022-11-27 18:12
世界上没有无缘无故的事情,尤其是写程序,可以断言,你的 'record.txt 中,一定有 4 行,而不是 1 ...
上面这个就是源文件内容 我就是纳闷一行等号为啥这样分割 难搞 1207139945 发表于 2022-11-27 20:54
上面这个就是源文件内容 我就是纳闷一行等号为啥这样分割 难搞
注意我代码的第 36 行,有指出你的代码有缩进错误,如果不改,就会产生很多文件,你肯定没有用我改的版本运行。用你的也可以,重点查一下和我代码 36 行相同的那个 else 的缩进位置。 jackz007 发表于 2022-11-27 21:05
注意我代码的第 36 行,有指出你的代码有缩进错误,如果不改,就会产生很多文件,你肯定没有用 ...
谢谢啦 就是这个缩进问题被我忽略了
页:
[1]