鱼C论坛

 找回密码
 立即注册
查看: 3082|回复: 25

[已解决]请教 open()函数,谢谢~!!

[复制链接]
发表于 2017-6-30 17:38:30 | 显示全部楼层 |阅读模式

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

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

x
小甲鱼的《零基础学python》课后作业28讲,有这样一题:
屏幕快照 2017-06-30 17.30.22.png
我按照答案输进去之后,出现以下问题:

(我用的是OS X 系统。)

  1. >>> a=open('/Users/cs/Downloads/OpenMe.mp3','rt')
  2. >>> for i in a:
  3.         print(i)

  4.        
  5. Traceback (most recent call last):
  6.   File "<pyshell#3>", line 1, in <module>
  7.     for i in a:
  8.   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
  9.     return codecs.ascii_decode(input, self.errors)[0]
  10. UnicodeDecodeError: 'ascii' codec can't decode byte 0xb3 in position 0: ordinal not in range(128)
复制代码



但我是能正常打开文件的。
屏幕快照 2017-06-30 17.34.52.png

麻烦了~~谢谢!!
最佳答案
2017-7-1 18:03:18
编码问题 首先要确定你的文件保存的编码 然后 open里指定encoding编码 才能正确打开 编码本身就是个很大的难点 带中文的 一般utf-8 gbk unicode 现在主流都是utf-8的 你试试把文件存成utf-8 然后open里也指定utf-8 然后 你的代码编码也保存成utf-8 以后就不会有这种问题了


mac上不指定open 的encoding的话 会默认编码 ascii打开 有中文当然会报错
我这有一份贼拉细致的编码问题的讲解 不知道你能看下去不

http://www.cnblogs.com/luotianshuai/articles/5735051.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-30 17:42:01 | 显示全部楼层
  1. a=open('/Users/cs/Downloads/OpenMe.mp3','rt')
  2. for i in a:
  3.         try:#跳过特殊字符
  4.             print(i)
  5.         except:
  6.             pass
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 17:58:36 | 显示全部楼层

您好,还是不行,但我可能知道原因了。
我重新写了一个只含有英文字母的txt,在Python里是可以open也可以read的。
但是我在这个txt里一加上中文,在Python里就只能open不能read了。
请问该怎么解决这个问题呢?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 18:02:03 | 显示全部楼层
csss 发表于 2017-6-30 17:58
您好,还是不行,但我可能知道原因了。
我重新写了一个只含有英文字母的txt,在Python里是可以open也可 ...

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

使用道具 举报

发表于 2017-6-30 18:02:30 | 显示全部楼层
  1. a=open('/Users/cs/Downloads/OpenMe.mp3','rt',encoding='utf-8',errors='ingore')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 18:17:43 | 显示全部楼层

屏幕快照 2017-06-30 18.14.24.png
屏幕快照 2017-06-30 18.14.31.png
屏幕快照 2017-06-30 18.14.12.png
您好,test1和test2就是差了中文字符,但是test2就打不开。请问是我的Python安装缺了什么吗?还是其他什么其他问题呀?谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 18:20:55 | 显示全部楼层
本帖最后由 csss 于 2017-6-30 18:23 编辑


您好,还是不行
屏幕快照 2017-06-30 18.18.53.png

另外,我测试了一下,好像是我打不开含有中文的文件。
屏幕快照 2017-06-30 18.14.24.png
屏幕快照 2017-06-30 18.14.31.png
屏幕快照 2017-06-30 18.14.12.png
请问是我安装python缺了什么吗?还是其他什么原因呀?谢谢~!
屏幕快照 2017-06-30 18.18.53.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 18:24:27 | 显示全部楼层
csss 发表于 2017-6-30 18:20
您好,还是不行

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

使用道具 举报

 楼主| 发表于 2017-6-30 18:28:14 | 显示全部楼层
ooxx7788 发表于 2017-6-30 18:24
把openme发出来看看

屏幕快照 2017-06-30 18.26.10.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 18:30:14 | 显示全部楼层

我是说你的文件,这个内容我有,我在本地打开是没有问题的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 18:42:24 | 显示全部楼层
csss 发表于 2017-6-30 18:17
您好,test1和test2就是差了中文字符,但是test2就打不开。请问是我的Python安装缺了什么吗?还是 ...

把IDLE里面的编码改为utf-8试试?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 18:52:48 | 显示全部楼层
ooxx7788 发表于 2017-6-30 18:30
我是说你的文件,这个内容我有,我在本地打开是没有问题的。

OpenMe.rar (556 Bytes, 下载次数: 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 18:53:34 | 显示全部楼层
~风介~ 发表于 2017-6-30 18:42
把IDLE里面的编码改为utf-8试试?

小白想问一下怎么样改编码呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-30 19:06:00 | 显示全部楼层
  1. In [48]: f = open(r'C:\Users\letian\Desktop\OpenMe.mp3','rt')

  2. In [49]: for i in f:
  3.     ...:     print(i)
  4.     ...:
  5. 长期使用Windows操作系统的朋友很容易被扩展名所误导,认为扩展名决定文件类型,其实
  6. 这种观念是错误的!



  7. 其实这就跟一个姓张的坏人,尽管把名字改为了“张好人”,但他还是一个坏人是一个道理
  8. 的^_^



  9. 关于文件的扩展名,初学者容易走进的误区:



  10. 误区一:文件扩展名是一个文件的必要构成部分



  11. 一个文件可以有或没有扩展名,对于打开文件操作,没有扩展名的文件需要选择程序去打开
  12. 它,有扩展名的文件会自动用设置好的程序(如有)去尝试打开(是“尝试打开”,而不是
  13. “打开”的原因参看下面的第2个误区),文件扩展名是一个常规文件的构成部分,但一个
  14. 文件并不一定需要一个扩展名。



  15. 误区二:文件扩展名表明了该文件是何种类型



  16. 文件扩展名可以人为设定,扩展名为TXT的文件有可能是一张图片,同样,扩展名为M-P3的
  17. 文件,依然可能是一个视频。
复制代码


我这里完全没有问题。。。。帮不上你了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 19:19:32 | 显示全部楼层
ooxx7788 发表于 2017-6-30 19:06
我这里完全没有问题。。。。帮不上你了

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

使用道具 举报

发表于 2017-7-1 11:42:38 | 显示全部楼层
你的问题是编码问题

  1. print(i)
复制代码

修改成
  1. print(i.encode('utf-8'))
复制代码

或者
  1. a=open('/Users/cs/Downloads/OpenMe.mp3','rt')
复制代码

改成
  1. a=open('/Users/cs/Downloads/OpenMe.mp3','rt',encoding='utf-8')
复制代码

试试
因为环境问题 我没有试过,不一定可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-1 17:08:29 | 显示全部楼层
lumber2388779 发表于 2017-7-1 11:42
你的问题是编码问题

你好,这个的确是编码问题
  1. a=open('/Users/cs/Downloads/OpenMe.mp3','rt',encoding='utf-8')
复制代码

以上还是打不开。要用gbk才打得开哈
  1. a=open('/Users/cs/Downloads/OpenMe.mp3','rt',encoding='gbk')
复制代码

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

使用道具 举报

发表于 2017-7-1 18:03:18 | 显示全部楼层    本楼为最佳答案   
编码问题 首先要确定你的文件保存的编码 然后 open里指定encoding编码 才能正确打开 编码本身就是个很大的难点 带中文的 一般utf-8 gbk unicode 现在主流都是utf-8的 你试试把文件存成utf-8 然后open里也指定utf-8 然后 你的代码编码也保存成utf-8 以后就不会有这种问题了


mac上不指定open 的encoding的话 会默认编码 ascii打开 有中文当然会报错
我这有一份贼拉细致的编码问题的讲解 不知道你能看下去不

http://www.cnblogs.com/luotianshuai/articles/5735051.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-1 20:47:30 | 显示全部楼层
csss 发表于 2017-7-1 17:08
你好,这个的确是编码问题

以上还是打不开。要用gbk才打得开哈

恩 没事 下次打不开可以先用其他软件打开看下编码如uce或notepad++
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-1 22:38:00 | 显示全部楼层
sky 发表于 2017-7-1 18:03
编码问题 首先要确定你的文件保存的编码 然后 open里指定encoding编码 才能正确打开 编码本身就是 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-13 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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