鱼C论坛

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

[已解决]第029讲课堂作业,分割客服问答文件

[复制链接]
发表于 2020-7-14 11:14:37 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 jiong_jiong 于 2020-7-14 13:47 编辑

课堂上,小甲鱼是将字符串分割后,写入boy和girl的两个列表中,再将列表写入文件。
我试着改成,不要列表,直接进行写入。最后并没有生成新文件。
想请教一下我代码哪里出了问题

  1. f = open(r'C:\Users\jiong\Desktop\record.txt','r')


  2. for each in f:
  3.     c = 1
  4.     filenameb='boy_'+str(c)+'.txt'
  5.     filenameg='girl_'+str(c)+'.txt'
  6.     if each[0:6] == '======':
  7.         bfile.close()            #找到分隔符后,对之前的文件进行关闭保存      
  8.         gfile.close()
  9.         c = c+1
  10.     else:
  11.         (role,spoken)=each.split(':',1)
  12.         if role == '小甲鱼':
  13.             bfile = open(filenameb,'w')
  14.             bfile.write(spoken)
  15.         if role == '小客服':
  16.             gfile = open(filenameg,'w')
  17.             gfile.writelines(spoken)

  18.             
  19. f.close()
复制代码




根据最佳答案改写的:
  1. f = open(r'C:\Users\jiong\Desktop\record.txt')
  2. c=1
  3. ##filenameb = 'boy_' + str(c) + '.txt'
  4. ##filenameg = 'girl_' + str(c) + '.txt'
  5. ##bfile = open(filenameb, 'a')
  6. ##gfile = open(filenameg, 'a')这几句放这里的话,filename不会变化,只会生成一个文件

  7. for each in f:
  8.     filenameb = 'boy_' + str(c) + '.txt'
  9.     filenameg = 'girl_' + str(c) + '.txt'
  10.     bfile = open(filenameb, 'a')
  11.     gfile = open(filenameg, 'a')
  12.     if each[0:6] != '======':
  13.         (role,spoken)=each.split(':',1)
  14.         if role == '小甲鱼':
  15.             bfile.write(spoken)
  16.         if role == '小客服':
  17.             gfile.write(spoken)
  18.     else:
  19.         bfile.close()
  20.         gfile.close()
  21.         c +=1
  22.         print('c=%d'%c)
  23.         bfile =open(filenameb,'a')
  24.         gfile =open(filenameg,'a')

  25. bfile.close()
  26. gfile.close()
  27. f.close()
复制代码
最佳答案
2020-7-14 11:41:43

重新改了下,现在可以生成三个文件了,之前只生成两个是因为 c = 2 在循环内了

  1. f = open(r'C:\Users\jiong\Desktop\record.txt')
  2. bfile = open('boy_1.txt', 'a')
  3. gfile = open('girl_1.txt', 'a')
  4. c = 2
  5. for each in f:
  6.     filenameb = 'boy_' + str(c) + '.txt'
  7.     filenameg = 'girl_' + str(c) + '.txt'
  8.     if each[0:6] == '======':
  9.         bfile.close()  # 找到分隔符后,对之前的文件进行关闭保存
  10.         gfile.close()
  11.         bfile = open(filenameb, 'a')
  12.         gfile = open(filenameg, 'a')
  13.         c += 1
  14.     else:
  15.         (role, spoken) = each.split(':', 1)
  16.         if role == '小甲鱼':
  17.             bfile.write(spoken)
  18.         if role == '小客服':
  19.             gfile.write(spoken)

  20. bfile.close()
  21. gfile.close()
  22. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-14 11:15:55 | 显示全部楼层

'w' 写入是覆盖写入,你应该改成 'a'

用 w 每次循环都会重新创建个空白文件来覆盖上次的文件内容
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 11:23:03 | 显示全部楼层
Twilight6 发表于 2020-7-14 11:15
'w' 写入是覆盖写入,你应该改成 'a'

用 w 每次循环都会重新创建个空白文件来覆盖上次的文件内容

已改,但是不行。
连空文件都没有。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 11:25:49 | 显示全部楼层
jiong_jiong 发表于 2020-7-14 11:23
已改,但是不行。
连空文件都没有。




  1. f = open(r'C:\Users\jiong\Desktop\record.txt')
  2. bfile = open('boy_1.txt', 'a')
  3. gfile = open('girl_1.txt', 'a')
  4. for each in f:
  5.     c = 2
  6.     filenameb = 'boy_' + str(c) + '.txt'
  7.     filenameg = 'girl_' + str(c) + '.txt'
  8.     if each[0:6] == '======':
  9.         bfile.close()  # 找到分隔符后,对之前的文件进行关闭保存
  10.         gfile.close()
  11.         bfile = open(filenameb, 'a')
  12.         gfile = open(filenameg, 'a')
  13.         c = c + 1
  14.     else:
  15.         (role, spoken) = each.split(':', 1)
  16.         if role == '小甲鱼':
  17.             bfile.write(spoken)
  18.         if role == '小客服':
  19.             gfile.write(spoken)
  20. bfile.close()  # 找到分隔符后,对之前的文件进行关闭保存
  21. gfile.close()
  22. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 11:29:04 | 显示全部楼层

已测试,还是不行。没有新文件生成。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 11:33:17 | 显示全部楼层
jiong_jiong 发表于 2020-7-14 11:29
已测试,还是不行。没有新文件生成。



你文件内容有问题吧,我测试有生成文件,只不过少了一个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 11:34:55 | 显示全部楼层
Twilight6 发表于 2020-7-14 11:33
你文件内容有问题吧,我测试有生成文件,只不过少了一个

应该不会哦,我课前有写一个很笨的程序,是可以生成的。我又去检查一下了原文件,是OK的。

以下是笨程序

  1. f = open(r'C:\Users\jiong\Desktop\record.txt','r')
  2. b1 = open(r'C:\Users\jiong\Desktop\boy_1.txt','w')
  3. g1 = open(r'C:\Users\jiong\Desktop\girl_1.txt','w')

  4. for each in f:
  5.     if each[0:3] == '小甲鱼':
  6.         b1.write(each[4:])
  7.     elif each[0:3] == '小客服':
  8.         g1.write(each[4:])
  9.     elif each[0:3] == '===':
  10.         f.readline()
  11.         break
  12. b1.close()
  13. g1.close()


  14. b2 = open(r'C:\Users\jiong\Desktop\boy_2.txt','w')
  15. g2 = open(r'C:\Users\jiong\Desktop\girl_2.txt','w')
  16. for each in f:
  17.     if each[0:3] == '小甲鱼':
  18.         b2.write(each[4:])
  19.     elif each[0:3] == '小客服':
  20.         g2.write(each[4:])
  21.     elif each[0:3] == '===':
  22.         f.readline()
  23.         break
  24. b2.close()
  25. g2.close()

  26. b3 = open(r'C:\Users\jiong\Desktop\boy_3.txt','w')
  27. g3 = open(r'C:\Users\jiong\Desktop\girl_3.txt','w')
  28. for each in f:
  29.     if each[0:3] == '小甲鱼':
  30.         b3.write(each[4:])
  31.     elif each[0:3] == '小客服':
  32.         g3.write(each[4:])
  33.     elif each[0:3] == '===':
  34.         f.readline()
  35.         break
  36. b3.close()
  37. g3.close()
  38. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 11:36:31 | 显示全部楼层
jiong_jiong 发表于 2020-7-14 11:34
应该不会哦,我课前有写一个很笨的程序,是可以生成的。我又去检查一下了原文件,是OK的。

以下是笨程 ...



先去检查下,我测试正常生成两个,只不过少了一个:

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

使用道具 举报

发表于 2020-7-14 11:41:43 | 显示全部楼层    本楼为最佳答案   

重新改了下,现在可以生成三个文件了,之前只生成两个是因为 c = 2 在循环内了

  1. f = open(r'C:\Users\jiong\Desktop\record.txt')
  2. bfile = open('boy_1.txt', 'a')
  3. gfile = open('girl_1.txt', 'a')
  4. c = 2
  5. for each in f:
  6.     filenameb = 'boy_' + str(c) + '.txt'
  7.     filenameg = 'girl_' + str(c) + '.txt'
  8.     if each[0:6] == '======':
  9.         bfile.close()  # 找到分隔符后,对之前的文件进行关闭保存
  10.         gfile.close()
  11.         bfile = open(filenameb, 'a')
  12.         gfile = open(filenameg, 'a')
  13.         c += 1
  14.     else:
  15.         (role, spoken) = each.split(':', 1)
  16.         if role == '小甲鱼':
  17.             bfile.write(spoken)
  18.         if role == '小客服':
  19.             gfile.write(spoken)

  20. bfile.close()
  21. gfile.close()
  22. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 11:47:12 | 显示全部楼层
Twilight6 发表于 2020-7-14 11:33
你文件内容有问题吧,我测试有生成文件,只不过少了一个

我找到了,但是有个问题请教一下。
我那个笨程序,生成的文件就在桌面。

但是您的程序生成在'''***\AppData\Local\Programs\Python\Python38-32'''为什么呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 11:48:24 | 显示全部楼层
jiong_jiong 发表于 2020-7-14 11:47
我找到了,但是有个问题请教一下。
我那个笨程序,生成的文件就在桌面。

没加 open 准确路径,默认生成在脚本当前文件夹,如果是在 控制台运行,默认保存在 Python 安装路径
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 11:51:18 | 显示全部楼层
Twilight6 发表于 2020-7-14 11:48
没加 open 准确路径,默认生成在脚本当前文件夹,如果是在 控制台运行,默认保存在 Python 安装路径

我没听懂。
按理说,都是在控制台运行的啊。都是写的脚本,然后运行的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-14 11:53:01 | 显示全部楼层
jiong_jiong 发表于 2020-7-14 11:51
我没听懂。
按理说,都是在控制台运行的啊。都是写的脚本,然后运行的。



控制台直接运行是因为控制台这个程序保存在 安装目录

而你运行脚本是因为脚本所在目录是脚本的目录

你运行脚本时候,控制台工作目录会改变成脚本目录
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 11:54:29 | 显示全部楼层
Twilight6 发表于 2020-7-14 11:41
重新改了下,现在可以生成三个文件了,之前只生成两个是因为 c = 2 在循环内了

为什么一定需要先写02/03行呢??之前的问题在哪里?
  1. bfile = open('boy_1.txt', 'a')
  2. gfile = open('girl_1.txt', 'a')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-14 13:46:16 | 显示全部楼层
  1. f = open(r'C:\Users\jiong\Desktop\record.txt')
  2. c=1
  3. ##filenameb = 'boy_' + str(c) + '.txt'
  4. ##filenameg = 'girl_' + str(c) + '.txt'
  5. ##bfile = open(filenameb, 'a')
  6. ##gfile = open(filenameg, 'a')这几句放这里的话,filename不会变化,只会生成一个文件

  7. for each in f:
  8.     filenameb = 'boy_' + str(c) + '.txt'
  9.     filenameg = 'girl_' + str(c) + '.txt'
  10.     bfile = open(filenameb, 'a')
  11.     gfile = open(filenameg, 'a')
  12.     if each[0:6] != '======':
  13.         (role,spoken)=each.split(':',1)
  14.         if role == '小甲鱼':
  15.             bfile.write(spoken)
  16.         if role == '小客服':
  17.             gfile.write(spoken)
  18.     else:
  19.         bfile.close()
  20.         gfile.close()
  21.         c +=1
  22.         print('c=%d'%c)
  23.         bfile =open(filenameb,'a')
  24.         gfile =open(filenameg,'a')

  25. bfile.close()
  26. gfile.close()
  27. f.close()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 14:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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