鱼C论坛

 找回密码
 立即注册
查看: 4287|回复: 4

[学习笔记] 第29课文件,一个任务

[复制链接]
发表于 2017-12-27 16:25:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 子非吾 于 2017-12-27 20:06 编辑

这一节课的需要将这个链接: https://pan.baidu.com/s/1hsH6TWo 密码: sczg 将txt文件按如下要求分割存储 搜狗截图20171227162609.png
  1. f=open('record.txt')
  2. boy=[]
  3. girl=[]
  4. count=1

  5. for each_line in f:
  6.     if each_line[:6]!='======':
  7.         (role,spoken)=each_line.split(':',1) #split(sep=None,maxsplit=-1)不带默认参数是以空格为字符切片字符串,若maxsplit参数有设置,则仅分割maxsplit个字符串,返回切片后的字符串拼接后的列表。
  8.         |                                                                          
  9.         |                                                        >>> a='x,aaaaa,bbbb,ccc'
  10.         |                                                        >>> a.split(',',1)
  11.         |                                                        ['x', 'aaaaa,bbbb,ccc']
  12.         |                                                        >>> a.split(',',2)
  13.         |                                                        ['x', 'aaaaa', 'bbbb,ccc']
  14.         |                                                        >>> a.split(',',3)
  15.         |                                                        ['x', 'aaaaa', 'bbbb', 'ccc']
  16.         |
  17.         if role == '小甲鱼':
  18.             boy.append(spoken)
  19.         if role == '小客服':
  20.             girl.append(spoken)


  21.     else: #----------------------------(else: each_line[:6]=='======')。 因为‘======’分隔符有两句,所以else语句会被满足两次
  22.         file_name_boy='boy'+str(count)+'.txt'
  23.         file_name_girl='girl'+str(count)+'.txt'

  24.         boy_file=open(file_name_boy,'w')
  25.         girl_file=open(file_name_girl,'w')
  26.         

  27.         boy_file.writelines(boy) #----writelines(seq)向文件中写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
  28.         girl_file.writelines(girl)
  29.         
  30.         boy_file.close() #close='文件以可写的方式打开就要把写好的文件close(关闭)以保存'
  31.         girl_file.close()#close

  32.         count+=1#——————————循环一次就加一次1,这样以来girl/boy的1,2文件就出来了
  33.         boy=[]     #——————————每次都把列表还原,以保证没有上一次循环的内容
  34.         girl=[]


  35. #count在这里因为else循环了两次变成了3
  36. file_name_boy='boy'+str(count)+'.txt'
  37. file_name_girl='girl'+str(count)+'.txt'

  38. boy_file=open(file_name_boy,'w')
  39. girl_file=open(file_name_girl,'w')
  40.         

  41. boy_file.writelines(boy)
  42. girl_file.writelines(girl)



  43. boy_file.close()  #close
  44. girl_file.close()  #close
  45. f.close()#只读文件也要关闭,这是个好习惯
复制代码


当然看起来一大坨很不规范,我正在试图通过添加注释的方式来理解程序,大家不要学我。
还能精简成两个函数,已有现成的代码再写出函数很简单,但我现在还不准备把它弄成两个函数。这一节课的知识点不少。

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-27 18:16:30 | 显示全部楼层
网盘密码没有给我们呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-27 18:41:31 | 显示全部楼层

已修改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-27 19:01:07 | 显示全部楼层

非常感谢!请问一下我一模一样和甲老师的代码照打了一遍,为什么我的报错了呀?
TIM图片20171227190027.png
  1. f = open('record.txt')
  2. boy=[]
  3. girl=[]
  4. count=1

  5. for each_line in f:
  6.     if each_line[:6] != '=======':
  7.         (role,line_spoken)=each_line.split(':',1)
  8.         if role == '小甲鱼':
  9.             boy.append(line_spoken)
  10.         if role == '小客服':
  11.             girl.append(line_spoken)
  12.     else:
  13.         file_name_boy = 'boy_'+str(count)+'.txt'
  14.         file_name_girl ='girl_'+str(count)+'.txt'
  15.         boy_file=open(file_name_boy,'w')
  16.         girl_file=open(file_name_girl,'w')
  17.         boy_file.writelines(boy)
  18.         girl_file.writelines(girl)
  19.         boy_file.close()
  20.         girl_file.close()
  21.         boy=[]
  22.         girl=[]
  23.         count+=1
  24. file_name_boy = 'boy_'+str(count)+'.txt'
  25. file_name_girl ='girl_'+str(count)+'.txt'
  26. boy_file=open(file_name_boy,'w')
  27. girl_file=open(file_name_girl,'w')
  28. boy_file.writelines(boy)
  29. girl_file.writelines(girl)
  30. boy_file.close()
  31. girl_file.close()
  32. f.close()
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-27 19:45:21 | 显示全部楼层
本帖最后由 子非吾 于 2017-12-27 21:31 编辑
像番茄加两个蛋 发表于 2017-12-27 19:01
非常感谢!请问一下我一模一样和甲老师的代码照打了一遍,为什么我的报错了呀?


文件第8行出错
没有足够的值取出(分给role和line_spoken)(预期2,得到1)
第8行出错就要看前面if条件语句是不是搞错了

(ps:以上是用网易有道词典瞎猜的!)



问题出在你第7行代码,if each_line[:6] != '=======':这里面多了一个‘=’

str1=长等号分隔符

第7行 代码if each_liens[:6] != ‘=======’语句在遇到str1时,为True。

然后,当第8行代码 (role,lien_spoken) = each_line.spilt(':',1)对str1进行切片操作时,会出错。因为str1里面没有‘:’符号,所以each_line.spilt(':',1)只会返回一个值(一个包含str1的列表)。得到一个值,但是有两个人(role和lien_spoen)来分,报错是理所当然的。
360.jpg
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 20:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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