欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-08 17:17:35
...

用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)











相关标签: python文件读