马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
想在以下文档按对话者提炼对话内容至新的txt文本文件(暂不考虑pickle“腌制”):
看见鱼总发的《零基础入门学习Python(第031讲)》答案是这样写的: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)
1.我一直弄不明白这样的迭代是迭代文件中的每一行还是迭代文件中的每一个字符?
2.我单独运行了以下的代码,为什么boy列表的每个字符串最后都会多出\n换行符,明明每个“小甲鱼”前面没有换行?>>> f = open('record.txt')
>>> boy = []
>>> girl = []
>>> 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)
>>> boy
['咦??\n', '。。。。。。\n', '然后呢?\n', '呃。。。。。。你真牛!\n', '下次有人想调戏你我不阻止~\n', '哦?\n', '哈哈哈,我看到丫,我还发微博了呢~\n', '哟西~\n', 'T_T\n', '哦?什么事?\n', '哪里的?\n', '那正常,哪家公司?\n', '哦\n', '啊,你说什么?我在外边呢,这里好吵吖。。。。。。\n']
3.我运行了以下的代码,为什么最后列表boy依然为空?>>> boy
[]
>>> f
<_io.TextIOWrapper name='record.txt' mode='r' encoding='cp936'>
>>> f.read()
''
>>> f.seek(0,0)
0
>>> f.read()
'小客服:小甲鱼,今天有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟她说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!\n小客服:那是,谁让我是鱼C最可爱小客服嘛~\n小甲鱼:下次有人想调戏你我不阻止~\n小客服:滚!!!\n================================================================================\n小客服:小甲鱼,有个好评很好笑哈。\n小甲鱼:哦?\n小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"\n小甲鱼:哈哈哈,我看到丫,我还发微博了呢~\n小客服:嗯嗯,我看了你的微博丫~\n小甲鱼:哟西~\n小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”\n小甲鱼:T_T\n================================================================================\n小客服:小甲鱼,今天一个会员想找你\n小甲鱼:哦?什么事?\n小客服:他说你一个学生月薪已经超过12k了!!\n小甲鱼:哪里的?\n小客服:上海的\n小甲鱼:那正常,哪家公司?\n小客服:他没说呀。\n小甲鱼:哦\n小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!\n小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。\n小客服:滚!!!'
>>> for each_line in f:
if each_line[:6] != '======':
(role, line_spoken) = each_line.split(':', 1)
boy.append(line_spoken)
>>> boy
[]
望高手指教,谢谢!
1.我一直弄不明白这样的迭代是迭代文件中的每一行还是迭代文件中的每一个字符?
每一行;
2.我单独运行了以下的代码,为什么boy列表的每个字符串最后都会多出\n换行符,明明每个“小甲鱼”前面没有换行?
你看到的是编码后的,如果转成对应编码时才会显示\n,就像你用print()语句是默认是end='\n'也就是打印后默认换行;
3.我运行了以下的代码,为什么最后列表boy依然为空?
你的代码中先执行了f.seek(0,0)再执行f.read(),而执行f.read()时指针已经到了最后的位置,所以后面你boy一直为空的;
你只要把两句代码的执行顺序换下即可!
|