(Python)文件读取时出现编码报错(一)——已解决

前言

        初学Python,总会遇到这样那样的问题,最近学到了文件这一版块儿,本以为看看视频,在依葫芦画瓢就Ok了,可文件读取却给我上了眼药,必须解决

描述及实现

read()读取报错及解决

        网上找了篇现代诗复制到记事本,然后用Python代码来读取,报错        

        默认读取的编码为cp936,但显然读取不了,改为utf-8就好了

        用记事本打开也可看出文件编码为utf-8

        

 readline()报错及解决

        将文件指针移到60字节处报错,移到53、56、59为什么不报错,这个是因为使用f.seek()定位的文件指针是按字节为单位进行计算的,演示文件是以utf-8编码的,按照规则,一个汉字要占三个字节(注意:以GBK编码,一个汉字要占两个字节),f.seek(59)的位置位于字符的开始位置(或结束位置),因此可以正常打印,而f.seek(60)正好位于字符中间位置,无法将编码进行解码

        至于readline()读取的结果为什么是这样,没弄清楚,但可以知道readline()报错怎么解决

         

 补充

        编码解码的概念可以简单理解为把字符转为字节,而解码就是把字节转为字符

升华

        因为复制过来的现代诗中间有一空行,于是打算用Pyghon来删除空行,正好实践下

        

#原理就是将原文件中的空行去除,然后写入到新文件中
f = open('D:\\file_test.txt',encoding = 'utf-8') #要删除空行的文件
f1 = open('D:\\file_test1.txt','x',encoding = 'utf-8') #要写入的文件,该文件原来并不存在

for line in f.readlines():
    if line == '\n':
        line = line.strip('\n') #strip 去除 意思是判断所读取到的是空行,就去除掉
    f1.write(line)

f.close() #要记得写入操作完成后关闭,以免缓存所写入的数据因突然断电而丢失
f1.close()

运行如图

                        

效果如图

         

总结

        Python读取文件容易出现编码问题,还有就是文件指针所在位置问题,学了Python终于可以干点实事,用它来去除文本文件中的空行,别说,还挺好使

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值