鱼C论坛

 找回密码
 立即注册
查看: 2209|回复: 7

[已解决]Python 打开文件尝试 —— 无法进行中文操作

[复制链接]
发表于 2018-3-18 20:02:07 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 linzhengren90 于 2018-3-18 20:09 编辑

今天刚刚学到实用python打开文件,尝试了一下基本操作,都没有问题。
  1. >>> f = open('Test.txt')
  2. >>> f.read()
  3. 'Test'
  4. >>> f.close()
复制代码


但我尝试写入中文,和读取含有中文的文档时,会出现问题:
  1. >>> h = open('test2.txt')
  2. >>> h.read()
  3. Traceback (most recent call last):
  4.   File "<pyshell#28>", line 1, in <module>
  5.     h.read()
  6.   File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
  7.     return codecs.ascii_decode(input, self.errors)[0]
  8. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 11: ordinal not in range(128)
复制代码

  1. f = open('Test.txt','w')
  2. >>> f.write('林小宝最帅')
  3. Traceback (most recent call last):
  4.   File "<pyshell#31>", line 1, in <module>
  5.     f.write('林小宝最帅')
  6. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
复制代码


我英语不好,是说中文的字节数超出128,所以不能操作吗? 我的电脑是Mac,系统默认语言为英文。

另外,当使用英文为默认系统的时候,很多国内程序,邮件等,中文部分都会显示为乱码,是一个原因吗?

问题补充:
我在系统自带的Terminal 里面,尝试使用python,读取该文件。我得到了结果,但没有读出中文:
  1. >>> i = open('test2.txt')
  2. >>> i.read()
  3. 'Test test.\n\xe6\x9e\x97\xe5\xb0\x8f\xe5\xae\x9d\xe6\x9c\x80\xe5\xb8\x85'
复制代码


请高手解答
最佳答案
2018-3-18 20:12:08
打开文件要加上编码UTF-8.
  1. >>> f = open('record.txt')
  2. >>> f.read()
  3. Traceback (most recent call last):
  4.   File "<pyshell#105>", line 1, in <module>
  5.     f.read()
  6. UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence
  7. >>> f.close()
  8. >>> f = open('record.txt', encoding = 'UTF-8')
  9. >>> f.read()
  10. '小客服:小甲鱼,今天有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟她说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑下她!然后跟我说:“您要买个优盘,我就帮您留一下~”\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!\n小客服:那是,谁让我是鱼C最可爱小客服嘛~\n小甲鱼:下次有人想调戏你我不阻止~\n小客服:滚!!!\n===========================================================================\n小客服:小甲鱼,有个好评很好笑哈。\n小甲鱼:哦?\n小客服:有了小甲鱼,以后妈妈再也不用担心我的学习了~\n小甲鱼:哈哈哈,我看到丫,我还发微博了呢~\n小客服:恩恩,我看了你的微薄丫\n小甲鱼:哟西~\n小客服:那个有条回复‘左手拿着小甲鱼,右手拿着打火机,那里不会点哪里,so easy ’\n小甲鱼:呜呜\n===========================================================================\n小客服:小甲鱼,今天一个会员想找你\n小甲鱼:哦?什么事?\n小客服:她说你一个学生月薪已经超过12k了!!\n小甲鱼:哪里的?\n小客服:上海的\n小甲鱼:那正常,哪家公司?\n小客服:他没说啊。\n小甲鱼:哦\n小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!\n小甲鱼:啊,你说什么?我在外边呢,这里好吵呀。。。。。。\n小客服:滚!!!\n'
  11. >>> f.close()
复制代码

写文件我没有出现错误,你也加上UTF-8试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-18 20:12:08 | 显示全部楼层    本楼为最佳答案   
打开文件要加上编码UTF-8.
  1. >>> f = open('record.txt')
  2. >>> f.read()
  3. Traceback (most recent call last):
  4.   File "<pyshell#105>", line 1, in <module>
  5.     f.read()
  6. UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence
  7. >>> f.close()
  8. >>> f = open('record.txt', encoding = 'UTF-8')
  9. >>> f.read()
  10. '小客服:小甲鱼,今天有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟她说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑下她!然后跟我说:“您要买个优盘,我就帮您留一下~”\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!\n小客服:那是,谁让我是鱼C最可爱小客服嘛~\n小甲鱼:下次有人想调戏你我不阻止~\n小客服:滚!!!\n===========================================================================\n小客服:小甲鱼,有个好评很好笑哈。\n小甲鱼:哦?\n小客服:有了小甲鱼,以后妈妈再也不用担心我的学习了~\n小甲鱼:哈哈哈,我看到丫,我还发微博了呢~\n小客服:恩恩,我看了你的微薄丫\n小甲鱼:哟西~\n小客服:那个有条回复‘左手拿着小甲鱼,右手拿着打火机,那里不会点哪里,so easy ’\n小甲鱼:呜呜\n===========================================================================\n小客服:小甲鱼,今天一个会员想找你\n小甲鱼:哦?什么事?\n小客服:她说你一个学生月薪已经超过12k了!!\n小甲鱼:哪里的?\n小客服:上海的\n小甲鱼:那正常,哪家公司?\n小客服:他没说啊。\n小甲鱼:哦\n小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!\n小甲鱼:啊,你说什么?我在外边呢,这里好吵呀。。。。。。\n小客服:滚!!!\n'
  11. >>> f.close()
复制代码

写文件我没有出现错误,你也加上UTF-8试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 20:21:47 | 显示全部楼层
2)文件编码判断

import chardet
tt=open('c:\\111.txt','rb')
ff=tt.readline()
#这里试着换成read(5)也可以,但是换成readlines()后报错
enc=chardet.detect(ff)
print(enc['encoding'])
tt.close()


# 以指定编码打开文件
with open("新建文本文档.txt", "r", encoding=enc) as f:
    print(f.read())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 20:27:19 | 显示全部楼层
冬雪雪冬 发表于 2018-3-18 20:12
打开文件要加上编码UTF-8.

写文件我没有出现错误,你也加上UTF-8试试。

感谢解答,我能够读取了,但似乎不能编辑文档
  1. >>> g=open('test2.txt',encoding = 'UTF-8')
  2. >>> g.read()
  3. 'Test test.\n林小宝最帅'
  4. >>> g.close()
复制代码


尝试用write() 方法进行写入,没有报错,但是我的文档为空。现实文件确实修改了,但里面没有内容。
  1. >>> g = open('test2.txt',encoding = 'UTF-8',mode = 'w')
  2. >>> g.read()
  3. Traceback (most recent call last):
  4.   File "<pyshell#45>", line 1, in <module>
  5.     g.read()
  6. io.UnsupportedOperation: not readable
  7. >>> g.tell()
  8. 0
  9. >>> g.write('林小宝喜欢Python')
  10. 11
  11. >>> g.read()
  12. Traceback (most recent call last):
  13.   File "<pyshell#48>", line 1, in <module>
  14.     g.read()
  15. io.UnsupportedOperation: not readable
  16. >>> g.close
  17. <built-in method close of _io.TextIOWrapper object at 0x103266048>
  18. >>> a = open('test2.txt')
  19. >>> a.read()
  20. ''
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 20:29:22 | 显示全部楼层
冬雪雪冬 发表于 2018-3-18 20:12
打开文件要加上编码UTF-8.

写文件我没有出现错误,你也加上UTF-8试试。

感谢解答,我能够读取了,但似乎不能编辑文档
  1. >>> g=open('test2.txt',encoding = 'UTF-8')
  2. >>> g.read()
  3. 'Test test.\n林小宝最帅'
  4. >>> g.close()
复制代码


尝试用write() 方法进行写入,没有报错,但是我的文档为空。现实文件确实修改了,但里面没有内容。
  1. >>> g = open('test2.txt',encoding = 'UTF-8',mode = 'w')
  2. >>> g.read()
  3. Traceback (most recent call last):
  4.   File "<pyshell#45>", line 1, in <module>
  5.     g.read()
  6. io.UnsupportedOperation: not readable
  7. >>> g.tell()
  8. 0
  9. >>> g.write('林小宝喜欢Python')
  10. 11
  11. >>> g.read()
  12. Traceback (most recent call last):
  13.   File "<pyshell#48>", line 1, in <module>
  14.     g.read()
  15. io.UnsupportedOperation: not readable
  16. >>> g.close
  17. <built-in method close of _io.TextIOWrapper object at 0x103266048>
  18. >>> a = open('test2.txt')
  19. >>> a.read()
  20. ''
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-18 20:32:07 | 显示全部楼层
linzhengren90 发表于 2018-3-18 20:29
感谢解答,我能够读取了,但似乎不能编辑文档

文档为空,是因为写入后没有关闭文件。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 22:19:00 | 显示全部楼层
冬雪雪冬 发表于 2018-3-18 20:32
文档为空,是因为写入后没有关闭文件。

非常感谢您的解答,简单易懂。

原看了半天,原来是close方法没有写括号,报错我没有看懂。 另外原来在写入模式中,是不可读的。现在印证之后,明白了。非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-18 22:28:45 | 显示全部楼层
ba21 发表于 2018-3-18 20:21
2)文件编码判断

import chardet

感谢解答,还是萌新,做了一些搜索,感觉您的答案也是对的,但我不是很懂。但这个问题我已经明白,感谢解答。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 20:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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