鱼C论坛

 找回密码
 立即注册
查看: 3013|回复: 17

[已解决]有跟文件的分割,并追加到列表,列表为空的问题

[复制链接]
发表于 2016-3-28 12:40:57 | 显示全部楼层 |阅读模式

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

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

x
根据老师上课时,所打印的代码,这些代码的问题在哪里?而且 在for循环中print  boy列表的循环,无任何打印
  1. f = open('E:\\redoct.txt','r')
  2. boy = []
  3. girl = []
  4. count = 1
  5. for each_line in f:
  6.     if each_line[:6] != '======':
  7.         
  8.         (role,spoken)= each_line.split(':',1)
  9.       
  10.         if role == '小甲鱼':
  11.             boy.extend(spoken)
  12.             print boy##这个没有任何打印
  13.         if role == '小客服':
  14.             girl.append(spoken)
  15.             print girl
  16.     else:
  17.         file_boy_name = 'boy_' + str(count) + '.txt'
  18.         file_girl_name = 'girl_' + str(count) + '.txt'
  19.         print file_boy_name

  20.         boyf = open('file_boy_name','w')
  21.         girlf = open('file_girl_name','w')

  22.         boyf.writelines(boy)
  23.         girlf.writelines(girl)

  24.         boyf.close()
  25.         girlf.close()

  26.         boy = []
  27.         girl = []
  28.         count += 1

  29. f.close()
复制代码
最佳答案
2016-3-29 09:50:49
仙人掌的花go 发表于 2016-3-28 17:36
不是 ,想要的是小甲鱼老师的那个打印出来的结果 ,开始append的不行,后来换成这个了.....

这个代码写的有不少问题,
1. 首先print函数如果是python 3的话,应该是要用括号的,例如print(x) 而不是print x(如果是python 2.x 那当我没说)
2. 其次在21,22行这里,如果按照你这个写法,那么打开的文件,其文件名会是'file_boy_name'和'file_girl_name'而不是'boy_' +str(count) + '.txt'
对这些基本语法,我稍微帮你改了改,你修改下文件目录应该就能跑了
  1. f = open('D:\\record.txt','r')
  2. boy = []
  3. girl = []
  4. count = 1
  5. for each_line in f:
  6.     if each_line[:6] != '======':
  7.         
  8.         (role,spoken)= each_line.split(':',1)
  9.       
  10.         if role == '小甲鱼':
  11.             boy.append(spoken)
  12.             print(boy)
  13.         if role == '小客服':
  14.             girl.append(spoken)
  15.             print(girl)
  16.     else:
  17.         file_boy_name = 'boy_' + str(count) + '.txt'
  18.         file_girl_name = 'girl_' + str(count) + '.txt'
  19.         print(file_boy_name)

  20.         boyf = open(file_boy_name,'w')
  21.         girlf = open(file_girl_name,'w')

  22.         boyf.writelines(boy)
  23.         girlf.writelines(girl)

  24.         boyf.close()
  25.         girlf.close()

  26.         boy = []
  27.         girl = []
  28.         count += 1

  29. f.close()
复制代码

3. 这个程序还会错过第二个=======之后的内容(这个问题你自己想想看)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-28 17:20:25 | 显示全部楼层
  1. f = open('E:\\redoct.txt','r')
复制代码

应该是record.txt吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-28 17:27:45 | 显示全部楼层
你这个第11行使用extend方法的话,会把字符串当做一个List附在boy后面,这是你想要的结果么?
比如:
  1. boy = []
  2. boy.extend('好好学习python')
复制代码

得到的boy会是:
  1. ['好', '好', '学', '习', 'p', 'y', 't', 'h', 'o', 'n']
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-28 17:33:49 | 显示全部楼层
holdme 发表于 2016-3-28 17:27
你这个第11行使用extend方法的话,会把字符串当做一个List附在boy后面,这是你想要的结果么?
比如:

开始用append 追加进去,才用这个的 extend的这个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-28 17:34:40 | 显示全部楼层
~风介~ 发表于 2016-3-28 17:20
应该是record.txt吧?

这个是重新命名的 ,忘记老师的了 就用了这个名字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-28 17:36:05 | 显示全部楼层
holdme 发表于 2016-3-28 17:27
你这个第11行使用extend方法的话,会把字符串当做一个List附在boy后面,这是你想要的结果么?
比如:

不是 ,想要的是小甲鱼老师的那个打印出来的结果 ,开始append的不行,后来换成这个了.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-29 09:50:49 | 显示全部楼层    本楼为最佳答案   
仙人掌的花go 发表于 2016-3-28 17:36
不是 ,想要的是小甲鱼老师的那个打印出来的结果 ,开始append的不行,后来换成这个了.....

这个代码写的有不少问题,
1. 首先print函数如果是python 3的话,应该是要用括号的,例如print(x) 而不是print x(如果是python 2.x 那当我没说)
2. 其次在21,22行这里,如果按照你这个写法,那么打开的文件,其文件名会是'file_boy_name'和'file_girl_name'而不是'boy_' +str(count) + '.txt'
对这些基本语法,我稍微帮你改了改,你修改下文件目录应该就能跑了
  1. f = open('D:\\record.txt','r')
  2. boy = []
  3. girl = []
  4. count = 1
  5. for each_line in f:
  6.     if each_line[:6] != '======':
  7.         
  8.         (role,spoken)= each_line.split(':',1)
  9.       
  10.         if role == '小甲鱼':
  11.             boy.append(spoken)
  12.             print(boy)
  13.         if role == '小客服':
  14.             girl.append(spoken)
  15.             print(girl)
  16.     else:
  17.         file_boy_name = 'boy_' + str(count) + '.txt'
  18.         file_girl_name = 'girl_' + str(count) + '.txt'
  19.         print(file_boy_name)

  20.         boyf = open(file_boy_name,'w')
  21.         girlf = open(file_girl_name,'w')

  22.         boyf.writelines(boy)
  23.         girlf.writelines(girl)

  24.         boyf.close()
  25.         girlf.close()

  26.         boy = []
  27.         girl = []
  28.         count += 1

  29. f.close()
复制代码

3. 这个程序还会错过第二个=======之后的内容(这个问题你自己想想看)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-29 11:53:44 | 显示全部楼层
holdme 发表于 2016-3-29 09:50
这个代码写的有不少问题,
1. 首先print函数如果是python 3的话,应该是要用括号的,例如print(x) 而不 ...

谢谢 第二个问题 已经发现了 ,
忘记告诉你,我的环境是2.7的 谢谢你 ,
但是怎么也想不明白为什么追加不到列表中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-30 08:13:17 | 显示全部楼层
holdme 发表于 2016-3-29 09:50
这个代码写的有不少问题,
1. 首先print函数如果是python 3的话,应该是要用括号的,例如print(x) 而不 ...

3. 这个程序还会错过第二个=======之后的内容.............
这个问题还是想不到,告诉我答案吧 泪奔了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-30 08:55:31 | 显示全部楼层
我之前上这节视频课的时候写的,比较简陋,供参考:
  1. import os
  2. os.chdir(r'C:\Users\LUOZ1CHAO\Desktop\practice Python\fishC\class29')
  3. i = 1
  4. with open('record.txt','r') as f:
  5.     f_b = open('boy_'+str(i)+'.txt','w')
  6.     f_g = open('girl_'+str(i)+'.txt','w')   
  7.     for each_line in f:
  8.         try:            
  9.             (name, words)=each_line.split(":",1)
  10.             if name == '小甲鱼':
  11.                 f_b.write(words)
  12.             elif name == '小客服':
  13.                 f_g.write(words)
  14.         except ValueError:
  15.             f_b.close()
  16.             f_g.close()            
  17.             i = i + 1
  18.             f_b = open('boy_'+str(i)+'.txt','w')
  19.             f_g = open('girl_'+str(i)+'.txt','w')  
  20.             pass
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-31 09:06:05 | 显示全部楼层
holdme 发表于 2016-3-30 08:55
我之前上这节视频课的时候写的,比较简陋,供参考:

知道哪里错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-31 13:51:02 | 显示全部楼层

哈哈,一起学习,共同进步!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-31 16:25:54 | 显示全部楼层
holdme 发表于 2016-3-29 09:50
这个代码写的有不少问题,
1. 首先print函数如果是python 3的话,应该是要用括号的,例如print(x) 而不 ...

@冬雪雪冬 请帮忙看一下程序为什么会  错过第二个=======之后的内容
开始以为是分割之后换行了,所有的角色都不是小客服或者小甲鱼,以造成后面的if语句不执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-31 17:55:27 | 显示全部楼层
仙人掌的花go 发表于 2016-3-31 16:25
@冬雪雪冬 请帮忙看一下程序为什么会  错过第二个=======之后的内容
开始以为是分割之后换行了,所有的 ...

因为程序是读到====之后才做文件输出,第一段和段二段都可正常执行,第三段后面没有=====,就没有输出了。可以在循环之后单独把文件操作部分再做一次。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-31 21:57:54 | 显示全部楼层
冬雪雪冬 发表于 2016-3-31 17:55
因为程序是读到====之后才做文件输出,第一段和段二段都可正常执行,第三段后面没有=====,就没有输出了 ...

谢谢 明白了 但是这块还是不能执行,是什么原因
  1. if role == '小甲鱼':
  2.             print 'aaa'
  3.             boy.append(spoken)
  4.            
  5.         if role == '小客服':
  6.             girl.append(spoken)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-31 22:20:19 | 显示全部楼层
仙人掌的花go 发表于 2016-3-31 21:57
谢谢 明白了 但是这块还是不能执行,是什么原因

我这里是可以打印的。有可能你的record.txt文件的问题。
在if语句前,先打印role看看实际的内容是什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-4 20:39:48 | 显示全部楼层
仙人掌的花go 发表于 2016-3-31 21:57
谢谢 明白了 但是这块还是不能执行,是什么原因


一种可能的原因:(role,spoken)= each_line.split(':',1)这里的":"与文本文件里的“:”不同(中英文冒号不同),导致split()函数执行后没有结果(理论解释器应该报错)所以两个if语句均不成立,你在(role,spoken)= each_line.split(':',1)后面打印输入下role,spoken就知道了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-4 21:39:44 | 显示全部楼层
小小大鱼 发表于 2016-4-4 20:39
一种可能的原因:(role,spoken)= each_line.split(':',1)这里的":"与文本文件里的“:”不同(中英文冒 ...

嗯,开始的时就这么处理的,后来才发现是版本的问题,换成3之后,就能追加进去了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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