鱼C论坛

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

[已解决]关于python29讲的一个问题

[复制链接]
发表于 2017-10-29 15:49:37 | 显示全部楼层 |阅读模式

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

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

x
题目要求:将文件(record.txt)中的数据进行分割并按照以下规律保存起来:
-小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
-小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
-文件中总共有三段对话,分别保存为boy_1.txt,girl_1.txt,boy_2.txt,
girl_2.txt,boy_3.txt,girl_3.txt共6个文件(提示:文件中的不同对话见已经使用“=========”分割)

文件内容:
QQ截图20171029154126.png

我的代码:
  1. def sort_file():
  2.     source_file = open('G:/record.txt')
  3.     source_list = list(source_file)
  4.     boy_1 = open('G:/boy_1.txt','w')
  5.     boy_2 = open('G:/boy_2.txt','w')
  6.     boy_3 = open('G:/boy_3.txt','w')
  7.     girl_1 = open('G:/girl_1.txt','w')
  8.     girl_2 = open('G:/girl_2.txt','w')
  9.     girl_3 = open('G:/girl_3.txt','w')
  10.     count = 0
  11.     for each_line in source_list:
  12.         count += 1
  13.         if each_line[0:4] ==  '小客服:':
  14.             girl_1.write(each_line[4:])
  15.         elif each_line[0:4] == '小甲鱼:':
  16.             boy_1.write(each_line[4:])
  17.         elif each_line[0] == '=':
  18.             boy_1.close()
  19.             girl_1.close()
  20.             break
  21.    
  22.     for each_line in source_list[count:]:
  23.         count += 1
  24.         if each_line[0:4] ==  '小客服:':
  25.             girl_2.write(each_line[4:])
  26.         elif each_line[0:4] == '小甲鱼:':
  27.             boy_2.write(each_line[4:])
  28.         elif each_line[0] == '=':
  29.             boy_2.close()
  30.             girl_2.close()
  31.             break
  32.    
  33.     for each_line in source_list[count:]:
  34.         count += 1
  35.         if each_line[0:4] ==  '小客服:':
  36.             girl_3.write(each_line[4:])
  37.         elif each_line[0:4] == '小甲鱼:':
  38.             boy_3.write(each_line[4:])
复制代码

从结果来看,我的代码可以完成题目的要求,但是有一点我很不理解,就是我在最后一个for循环处,并没有写关闭boy_3,girl_3 的代码,因为我发现,就算我不写,最后也可以写到boy_3,girl_3这两个文件中。我很不理解。。。。
请大神指点一下,按道理来说应该代码运行后boy_3,girl_3是两个空文件啊?
最佳答案
2017-10-29 17:18:04
因为python自带垃圾回收机制,会自觉的帮你关闭,从而将缓冲区的信息写入文件
但是时间编程中最好还是自己手动关闭更好,这样才能保证数据不被篡改
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-29 17:18:04 | 显示全部楼层    本楼为最佳答案   
因为python自带垃圾回收机制,会自觉的帮你关闭,从而将缓冲区的信息写入文件
但是时间编程中最好还是自己手动关闭更好,这样才能保证数据不被篡改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-29 19:57:45 | 显示全部楼层
BngThea 发表于 2017-10-29 17:18
因为python自带垃圾回收机制,会自觉的帮你关闭,从而将缓冲区的信息写入文件
但是时间编程中最好还是自己 ...

这个垃圾回收机制是什么时候触发的呢?函数执行完?还是我关闭shell的时候?我尝试在shell中打开一个新文件并写入一些数据,然后不关闭文件就直接关掉shell,结果新建的文件中并没有我写入的数据,那是不是这种情况下python没有将缓冲区的信息写入我的文件,而是直接释放掉了呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-29 21:19:00 | 显示全部楼层
黎芃荨 发表于 2017-10-29 19:57
这个垃圾回收机制是什么时候触发的呢?函数执行完?还是我关闭shell的时候?我尝试在shell中打开一个新文 ...

具体我并不十分清楚,好像是按时间来的,一般是程序执行一段时间后会进行一次,如果你执行玩就关闭,这个机制可能还没有执行,所以文件为空
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-31 22:55:51 | 显示全部楼层
BngThea 发表于 2017-10-29 21:19
具体我并不十分清楚,好像是按时间来的,一般是程序执行一段时间后会进行一次,如果你执行玩就关闭,这个 ...

还是有点不理解,,可能我理解能力还不行,不过谢谢你的回答!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-3 12:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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