DoubleS、Zhao 发表于 2020-11-15 15:03:28

各位大佬帮帮忙,万分感谢

import pickle

def boy_talk(i):
    for each_line in all_lines:
      (name,content) = i.split(':')
      f = open('boy_%s'%count , 'wb')
      pickle.dump(content,f)
      f.close()

def girl_talk(i):
    for each_line in all_lines:
      (name,content) = i.split(':')
      f = open('girl_%s'%count , 'wb')
      pickle.dump(content,f)
      f.close()

all_lines = open('D:\\pycharm\\record.txt')
count = 1
for each_line in all_lines:
    if '小甲鱼' in each_line:
      boy_talk(each_line)
    elif '小客服' in each_line:
      girl_talk(each_line)
    elif '=======' in each_line:
      count += 1


为什么运行后只出现两个文件呢?求求各位大佬帮帮忙找找孩子的问题在哪,谢谢

{:9_220:}

weiter 发表于 2020-11-15 15:23:03

你需要出现几个文件?

DoubleS、Zhao 发表于 2020-11-15 17:17:38

weiter 发表于 2020-11-15 15:23
你需要出现几个文件?

3个呀小甲鱼31讲课后题大佬

weiter 发表于 2020-11-15 17:34:25

DoubleS、Zhao 发表于 2020-11-15 17:17
3个呀小甲鱼31讲课后题大佬

我是小白……不是大佬啊{:10_266:}
(我主要是没做过课后题,不然也不会问有几个文件……)

weiter 发表于 2020-11-15 17:39:42

我这里是运行的时候更秀……
只出来一个没有后缀的文件{:10_266:}

weiter 发表于 2020-11-15 17:42:09

这个是小甲鱼的答案:
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') # 记得一定要加 b 吖
    girl_file = open(file_name_girl, 'wb') # 记得一定要加 b 吖

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

    boy_file.close()
    girl_file.close()

def split_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.split(':', 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()

split_file('record.txt')

weiter 发表于 2020-11-15 17:43:06

对不起只能帮到这了……我是跳着学的{:10_266:}

昨非 发表于 2020-11-22 00:23:02

本帖最后由 昨非 于 2020-11-22 00:30 编辑

注意下面第39行的位置,for循环漏掉了一次写入,具体请看注释内容

#定义写入函数
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,'w')#以写入方式打开
    girl_file=open(file_name_girl,'w') #同理
   
    boy_file.writelines(boy) #写入
    girl_file.writelines(girl)
   
    boy_file.close()   #关闭
    girl_file.close()
   
#定义切分函数   
def spilt_file(file_name): #传入文件名
      f = open(file_name,"r",encoding='UTF-8')
         #关键点,编码方式                   就这里换个编码形式
      boy=[]   
      girl=[]
      count=1   
            
      for each_line in f: #遍历原对话文件每一行
            if each_line[:6]!='======':#以分割线判断
                (role,line_spoken)=each_line.split(':',1)
                #以:为界,分成元组,进行1次操作
                if role =='小甲鱼': #根据名称(前三个字符)不同分别记入两个列表
                  boy.append(line_spoken)
                if role =='小客服':
                  girl.append(line_spoken)
                  #到这一步,所有对话均被存入两列表
            else:#不是分割线的情况下,写入
                save_file(boy,girl,count) #调用写入,写入后清空列表,等待下次添加对话内容
               
                boy=[]
                girl=[]
                count+=1   #count从2到3时跳出循环,所以文件里计数器count为3的那一对文件就缺少了
            
      save_file(boy,girl,count)#第三段内容(上方for循环漏掉一次写入)
      f.close()   
页: [1]
查看完整版本: 各位大佬帮帮忙,万分感谢