python学习中用Python的内置函数open()创建、打开文件对象遇到的bug

用Python的内置函数open()创建、打开文件对象;通过文件对象的实例方法write/writelines,可以写入字符串到文本文档,通过文件对象的实例方法read/readlines,可以读取文本文件的内容,文件读写完毕后,应该用close的方法关闭文件。
祭上教科书上的代码:

import sys
filename=sys.argv[0]#所读取并输出的就是本程序文件
f=open(filename,'r',encoding='utf8')#打开文件
line_no=0#统计行号
while True:
    line_no +=1#行号计数
    line=f.readline()#读取行信息
    if line 
        print (line_no,":",line)#输出行号和行内容
    else:
        break
f.close()#关闭打开的文件 
教科书上的代码就是简单的读取程序本身的文件,先说明几点,sys.argv访问命令行参数,
而sys.argv[0]为Python脚本名,就是运行的程序名,argv[1]就是第一个参数,往后类推。
内置函数如何打开或创建文件对象,语法格式:
f=open(file,mode='r',buffering=-1,encoding=None)
file是要打开或创建的文件名,如果不在当前路径,需指出具体路径(只要是打开本程序之外的文件都要指明路径,
这个也是今天第一个碰到的bug)mode是打开文件的模式,buffering表示是否使用缓存(默认为-1,表示使用系统默认的缓存区大小,
encoding是文件的编码(这个是今日的第二个bug,折腾了好久)
好了,基本介绍完了,但是作为一名有志之士当然不能满足教科书啦,当然要改动下
,来点刺激的读取指定路径文件试试。这里只是列举问题和解决的方法
1、打开文件属性,找路径,一开始是直接把路径复制到filename那个位置上去,
结果出BUG,第二次是把路径赋给第二行的filename,结果又出BUG,但是位置是放对了,
后来查了下发现单纯地复制路径并不准确,要把路径用‘’括起来,
然后前面加个r (filename=r'C:\Users\guoxang\Documents')但是BUG继续来,
为什么?原因就是属性显示的路径只是文件所在的文件夹,所以以上路径只是文件所在的文件夹的位置,
按这种读取的话应该是文件目录,当然有bug,好了继续修改,
加上文件名filename=r'C:\Users\guoxang\Documents\python代码练习' 还是出bug,
可能是本人对文件文件名概念不好导致的出bug,添加的文件名没有 加后缀,必须加上.txt filename=r'C:\Users\guoxang\Documents\python代码练习.txt'才是完整的路径。好了,继续走,
又出bug,是因为记事本的字符编码类型跟要解释的类型utf-8不相同,是中文部分出问题,
所以要在记事本保存的时候把编码格式改一下,改为utf-8,才能正常解码。
第一次变更书上的代码就遇到坑,还坑的不浅,但是还是有很大的收获,
希望各位大佬不要嘲笑我,这次时间有点紧张,就只是简单的说说解决方法,原理什么的,还没完全搞懂,就不写了。
祭上修改好的代码
import sys
filename=r'C:\Users\guoxang\Documents\python代码练习.txt'
f=open(filename,'r',encoding='utf_8')
line_no=0
while True:
    line_no +=1
    line=f.readline()
    if line:
        print(line_no,":",line)
    else:
        break
f.close()
运行结果:
![运行如下](https://img-blog.csdn.net/20180908115200405?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTkyNDY1Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)











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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值