鱼C论坛

 找回密码
 立即注册
查看: 2044|回复: 11

[已解决]求助小甲鱼29讲的文本分割内容 照着视频敲代码运行出错。

[复制链接]
发表于 2017-5-8 17:08:51 | 显示全部楼层 |阅读模式

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

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

x
各位前辈们,尝试按照小甲鱼视频的内容照着敲运行出错,请问如何解决,感谢各位!  环境:Win10 PyCharm 2017.1.2      Python 2.7  


(role, line_spoken) = each.split(':', 1)  这个文本分割语句在Python 2.7 如何表达? 是否与版本有关?




                               
登录/注册后可看大图



f = open('record.txt')

boy = []
girl = []
count = 1
for each_line in f :
    if each_line[:6] != '=====':
        (role,line_spoken) = each_line.split(':',1)    #此为多重赋值,以“:”作字符串分割,1的含义是以将字符串分割为两部分
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '小客服':
            girl.append(line_spoken)
    else:
        file_name_boy = 'boy_' + str(count) + '.txt'
        file_name_girl = 'girl_' + str(count) + '.txt'

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

        boy_file.close()
        girl_file.close()

        boy = []
        girl = []
        count += 1

f.close()

                               
登录/注册后可看大图

出错信息(中文显示乱码怎么解决? ):   
D:\Python27\python.exe C:/Users/think/mystuff/2017-05-07/2017-05-07.py
Traceback (most recent call last):
  File "C:/Users/think/mystuff/2017-05-07/2017-05-07.py", line 12, in <module>
    (role,line_spoken) = each_line.split(':',1)    #姝や负澶氶噸璧嬪&#65533;硷紝浠モ&#65533;滐細鈥濅綔瀛楃涓插垎鍓诧紝1鐨勫惈涔夋槸浠ュ皢瀛楃涓插垎鍓蹭负涓ら儴鍒&#65533;
ValueError: need more than 1 value to unpack

进程已结束,退出代码1
最佳答案
2017-5-9 18:25:59
408344252@qq.co 发表于 2017-5-9 15:49
按照你的方法修改了下代码,可以正常运行了,但是生成的文件没内容。

;我发现了一个很奇怪的问题,在Python2版本环境下运行你的代码,if role=='小甲鱼'这句话永远也不会返回True,同样的 if role == '小客服':也不会,这就说明了role与'小甲鱼'或'小客服'永远也不相等,但是!我试着打印role的值,发现它确确实实有时候是'小甲鱼',有时候是'小客服',同时role的类型也确确实实是字符串类型,那么问题来了,当两个对象内容一致同时类型一致,它们为什么还会不同呢?
我觉得应该是它俩的编码格式不同,很多时候我们了解到的编码格式有'gbk'和'utf-8'
我们知道'gbk'和'utf-8'的编码解码格式不同,那么它们对中文字符串解码后形成的字节符就不一样
中文windows系统默认使用的编码格式是'gbk',然后你在文件顶部声明编码方式为'utf-8',
想让role等于你代码里的'小甲鱼'或'小客服',我有两种解决方式:
1.将record.txt另存为,然后选择编码为utf-8
2.把你代码上面的# _*_ coding: utf-8 _*_改为# _*_ coding: gbk _*_
以上问题的出现主要是因为python2对中文的编码格式问题,如果你用的是python3或者record.txt内容没有中文就不会有问题了
TIM图片20170508164733.png

2017-05-07.py.txt

761 Bytes, 下载次数: 2

去除.txt文件后缀

record.txt

1.05 KB, 下载次数: 4

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-8 18:14:44 | 显示全部楼层
1.此处中文的乱码是程序的注释部分,python2在处理中文时容易出问题,但此处的问题不确定是python造成的,还是pycharm的设置有问题。
2.ValueError: need more than 1 value to unpack说明split无法分隔,即没有找到":",最大的可能性是文本文件中使用的是中文冒号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 19:43:02 | 显示全部楼层
不是版本问题,在if each_line[:6] != '=====':这句话里多加一个'='
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 19:43:35 | 显示全部楼层
是因为file->setting-> file encodings里面两个编码方式不对吧,改成GBK应该就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 15:47:51 | 显示全部楼层
按照3楼的方法修改了下代码,能正常运行了,但是生成的文件没有内容 ,
TIM图片20170509154526.png

2017-05-07 .py.txt

851 Bytes, 下载次数: 6

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

使用道具 举报

 楼主| 发表于 2017-5-9 15:48:33 | 显示全部楼层
当回首遇上转身 发表于 2017-5-8 19:43
是因为file->setting-> file encodings里面两个编码方式不对吧,改成GBK应该就好了

试了没有效果,三个选项都设置了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 15:49:08 | 显示全部楼层
18813034116 发表于 2017-5-8 19:43
不是版本问题,在if each_line[:6] != '=====':这句话里多加一个'='

按照你的方法修改了下代码,可以正常运行了,但是生成的文件没内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 16:09:22 | 显示全部楼层
冬雪雪冬 发表于 2017-5-8 18:14
1.此处中文的乱码是程序的注释部分,python2在处理中文时容易出问题,但此处的问题不确定是python造成的, ...

谢谢您的回答,现在程序可以运行了,但是调试窗口仍然是中文显示乱码, 运行结束后生成的文本文件没有内容。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-9 17:04:42 | 显示全部楼层
没有看到open文件的语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-9 17:19:56 | 显示全部楼层
冬雪雪冬 发表于 2017-5-9 17:04
没有看到open文件的语句

后面发现 了补充了 在5楼 有附件,就是我运行的文件。谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-9 18:25:59 | 显示全部楼层    本楼为最佳答案   
408344252@qq.co 发表于 2017-5-9 15:49
按照你的方法修改了下代码,可以正常运行了,但是生成的文件没内容。

;我发现了一个很奇怪的问题,在Python2版本环境下运行你的代码,if role=='小甲鱼'这句话永远也不会返回True,同样的 if role == '小客服':也不会,这就说明了role与'小甲鱼'或'小客服'永远也不相等,但是!我试着打印role的值,发现它确确实实有时候是'小甲鱼',有时候是'小客服',同时role的类型也确确实实是字符串类型,那么问题来了,当两个对象内容一致同时类型一致,它们为什么还会不同呢?
我觉得应该是它俩的编码格式不同,很多时候我们了解到的编码格式有'gbk'和'utf-8'
我们知道'gbk'和'utf-8'的编码解码格式不同,那么它们对中文字符串解码后形成的字节符就不一样
中文windows系统默认使用的编码格式是'gbk',然后你在文件顶部声明编码方式为'utf-8',
想让role等于你代码里的'小甲鱼'或'小客服',我有两种解决方式:
1.将record.txt另存为,然后选择编码为utf-8
2.把你代码上面的# _*_ coding: utf-8 _*_改为# _*_ coding: gbk _*_
以上问题的出现主要是因为python2对中文的编码格式问题,如果你用的是python3或者record.txt内容没有中文就不会有问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 11:16:08 | 显示全部楼层
18813034116 发表于 2017-5-9 18:25
;我发现了一个很奇怪的问题,在Python2版本环境下运行你的代码,if role=='小甲鱼'这句话永远也不会返回T ...

感谢,问题解决了: 将record.txt另存为,然后选择编码为utf-8,文件正常生成,有内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 16:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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