怎么用python打开文件
Python文件读写文件是最常见的IO操作。Python内置读写文件函数,用法与C兼容。
在阅读和撰写文件之前,我们必须了解操作系统提供在磁盘上阅读和撰写文件的功能。现代操作系统不允许普通程序直接操作磁盘。
python学习网,大量免费python视频教程,欢迎在线学习!
读写文件是要求操作系统打开文件对象(通常称为文件描述符),然后通过操作系统提供的接口从文件对象中读取数据(读取文件),或将数据写入文件对象(写入文件)
With 以各种方式打开open函数文件
相关推荐:Python基础教程
1.读文件
使用Python内置的open()函数,以阅读文件的模式打开文件对象,输入文件名和标记符:
f=open('/Users/michael/test.txt','r')
标示符’r就这样,我们成功地打开了一份文件。
假如文件不存在,open()函数会抛出IOError的错误,并给出错误代码和详细信息,告诉您文件不存在:
f=open('/Users/michael/notfound.txt','r') Traceback(mostrecentcalllast): File"<stdin>",line1,in<module> FileNotFoundError:[Errno2]Nosuchfileordirectory:'/Users/michael/notfound.txt'
如果文件打开成功,可以通过调用read()一次读取文件的所有内容。Python将内容读取到内存中,并用str对象表示:
f.read() 'Hello,world!'
最后一步是调用close()关闭文件。文件使用后必须关闭,因为文件对象占用了操作系统的资源,操作系统同时可以打开的文件数量有限:
f.close()
因为IOError可能在文件读写时产生,一旦出错,后面的f.close()不会调用。因此,为了确保文件能够正确关闭,无论是否出错,我们都可以使用try … finally实现:
try: f=open('/path/to/file','r') print(f.read()) finally: iff: f.close()
2.使用With Open 函数打开,常见的坑
使用方法
但是每次都这么写实太麻烦了,所以Python引入with语句自动帮我们调用close()方法:
with 调用close()方法的作用是
withopen('/path/to/file','r')asf: print(f.read())
f.read() 阅读所有文件内容
和前面的try一样...finally是一样的,但是代码更好更简单,不需要调用finally.close()方法。
调用read()会一次读取文件的所有内容,如果文件有10g,内存就会爆炸。
为了保险起见,可以反复调用read(size)方法,每次最多读size字节。例如,read(1024) 每次读取1024个字节的数据内容
调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容,并按行返回list。所以要根据需要决定如何调用。
假如文件很小,read()一次性读取最方便;如果文件大小无法确定,请反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
forlineinf.readlines(): print(line.strip())
把末尾的‘\\n’在 strip() 目标内容line中的所有空间、空行等都可以在函数中删除,只剩下文字内容。
常见的坑
(1)如上图所示,Fold001文件夹下有一个read_file.读取hellolo的py文件.txt文件,代码如上图所示,可以正常引用。
(2)但如果引用静态文件的函数再次被其他函数调用,例如Fold002中的函数read.py调用,那么readfile()函数相当于read.Py目录执行,然后静态文件helolo.与read相比,txt与read相比.py路径,不是上图的路径,否则会报错,如下:
3.写入内容
写文件和读文件是一样的。唯一的区别是在调用open()函数时,将标识符传输到“w’或者’wb意思是写文本文件或写二进制文件:
f=open('/Users/michael/test.txt','w') f.write('Hello,world!') f.close()
可以反复调用write()写文件,但一定要调用f.close()关闭文件。
当我们写文件时,操作系统通常不会立即将数据写入磁盘,而是将数据放入内存中缓存,然后在业余时间慢慢写入。
只有在调用close()方法时,操作系统才能保证将所有未写入的数据写入磁盘。忘记调用close()的结果是,数据可能只写了一部分到磁盘,剩下的丢失了。因此,使用with语句获得保险:
4.With Open写入内容
withopen('/Users/michael/test.txt','w')asf: f.write('Hello,world!')
要写入特定编码的文本文件,请将open()函数传输到encoding参数,并将字符串自动转换为指定编码
字符编码
5.打开非utf-8编码的文件
要读取非UTF-8编码的文本文件,需要将open()函数传输到encoding参数,例如,读取GBK编码的文件:
f=open('/Users/michael/gbk.txt','r',encoding='gbk') f.read()
遇到一些编码不规范的文件,你可能会遇到Unicodecoderor,因为一些非法编码的字符可能夹杂在文本文件中。在这种情况下,open()函数还接收errors参数,表示如何处理编码错误。最简单的方法就是直接忽略:
f=open('/Users/michael/gbk.txt','r',encoding='gbk',errors='ignore')
6.打开二进制文件
上述默认情况是读取文本文件和UTF-8编码的文本文件。读取图片、视频等二进制文件,使用rb打开模式下的文件:
f=open('/Users/michael/test.jpg','rb') f.read() b'\xff\xd8\xffxe1\x00\x18Exif\x00\x00...'#十六进制表示字节
7.多个文件的读写操作(2种方法可供参考)
withopen('/home/xbwang/Desktop/output_measures.txt','r')asf: withopen('/home/xbwang/Desktop/output_measures2.txt','r')asf1: withopen('/home/xbwang/Desktop/output_output_bk.txt','r')asf2: ...
withopen('/home/xbwang/Desktop/output_measures.txt','r')asf: ... withopen('/home/xbwang/Desktop/output_measures2.txt','r')asf1: ... withopen('/home/xbwang/Desktop/output_output_bk.txt','r')asf2: ...
推荐阅读python文件: