鱼C论坛

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

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

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

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

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

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

(我用的是OS X 系统。)
>>> a=open('/Users/cs/Downloads/OpenMe.mp3','rt')
>>> for i in a:
        print(i)

        
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    for i in a:
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
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 | 显示全部楼层
a=open('/Users/cs/Downloads/OpenMe.mp3','rt')
for i in a:
        try:#跳过特殊字符
            print(i)
        except:
            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 | 显示全部楼层
 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 | 显示全部楼层
In [48]: f = open(r'C:\Users\letian\Desktop\OpenMe.mp3','rt')

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



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



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



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



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



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



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

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

使用道具 举报

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

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

使用道具 举报

发表于 2017-7-1 11:42:38 | 显示全部楼层
你的问题是编码问题
print(i)
修改成
print(i.encode('utf-8'))
或者
a=open('/Users/cs/Downloads/OpenMe.mp3','rt')
改成
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
你的问题是编码问题

你好,这个的确是编码问题
a=open('/Users/cs/Downloads/OpenMe.mp3','rt',encoding='utf-8')
以上还是打不开。要用gbk才打得开哈
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-7-27 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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