一 文件操作的初识
我的理解:
1、本地随意的一个文件文件
2、使用代码程序去执行操作文件
- 文件路径 :path
-
打开文件的方式 : 只读,只写,追加,写读,读写等
-
编码方式 :utf-8,gbk,gb2312
1、创建一个py文件,利用Python代码打开这个文件
f = open('F:\富哥92fuge.txt',mode='r',encoding='utf-8') content = f.read() print(content) f.close() 结果: 欢迎来到富哥运维博客www.92fuge.com
解释:
open 内置函数,open底层调用的是操作系统的接口。 f1,变量,f1,fh,file_handler,f_h,文件句柄。 对文件进行的任何操作,都得通过文件句柄. 的方式。 encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码 windows: gbk。 linux: utf-8. mac : utf-8. f1.close() 关闭文件句柄。
错误问题
C:\Users\富华\PycharmProjects\untitled4\venv\Scripts\python.exe C:/Users/富华/PycharmProjects/untitled4/Day16/文件操作的初识.py Traceback (most recent call last): File "C:/Users/富华/PycharmProjects/untitled4/Day16/文件操作的初识.py", line 2, in <module> content = f1.read() File "C:\Users\富华\AppData\Local\Programs\Python\Python36\lib\codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte
解决办法:
f1 = open('F:\富哥92fuge.txt',encoding='gbk',mode='r') content = f1.read() print(content) f1.close()
文件操作的三部曲
- 打开文件
-
对文件句柄进行相应的操作
-
关闭文件
报错原因
- UnicodeDecodeError : 文件存储时与文件打开编码本运行的不一致
-
第二个错误 : 路径的分隔符问题
r 'F:\富哥92fuge.txt' 在路径的整体前面加一个r。
文件操作的读 r,rb,r+,r+b 四种模式 r:read() read(n) readline() readlines() for循环:可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存。 rb : 操作非文本类型的文件(视频、图片、音频) 读取文件的小例子 1、read()将文件中的内容全部读取出来;弊端 如果文件很大就会非常的占用内存,容易导致内存奔溃. # !usr/bin/env python # -*- coding:utf-8 _* f = open('文件的读', encoding='utf-8') content = f.read() print(content) f.close() 2、 # !usr/bin/env python # -*- coding:utf-8 _* f = open('文件的读', encoding='utf-8') content = f.read() print(content,type(content)) f.close() 3、按照字符读取
f = open('文件的读', encoding='utf-8') content = f.read(4) print(content) f.close()
4、readline()
f = open('文件的读', encoding='utf-8') print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) f.close()
5、readlines() 返回一个列表,列表中的每一个元素的源文件的每一行
f = open('文件的读', encoding='utf-8') fuge = f.readlines() print(fuge)
6、for循环
f = open('../path1/弟子规',mode='r',encoding='utf-8') for line in f: print(line) #这种方式就是在一行一行的进行读取,它就执行了下边的功能 print(f.readline()) print(f.readline()) print(f.readline()) print(f.readline()) f.close()
7、rb 模式
rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。记住下面讲的也是一样,带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。
f = open('20191028104720.jpg', mode='rb') content = f.read() print(content) f.close()
结果:
文件操作的写、追加
1 w模式
如果文件不存在,利用w模式操作文件,那么它会先创建文件,然后写入内容.
# !usr/bin/env python # -*- coding:utf-8 _*- f = open('文件的写',encoding='utf-8',mode='w') f.write("www.92fuge.com") f = open('文件的写' , encoding='utf-8', mode='r') read1 = f.read() f.close() print(read1)
结果:
PyDev console: starting.
Python 3.6.8 (tags/v3.6.8:3c6b436a57, Dec 24 2018, 00:16:47) [MSC v.1916 64 bit (AMD64)] on win32
>>> runfile('C:/Users/Administrator/PycharmProjects/untitled3/文件操作的写.py', wdir='C:/Users/Administrator/PycharmProjects/untitled3')
www.92fuge.com
2、 wb 非文本类型的文件
以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如:图片,音频,视频等。
举例说明:
我先以rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样我就完成了类似于一个图片复制的流程。具体代码如下
文件操作得整体总结 :
r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则创建;存在则清空内容】 x, 只写模式【不可读;不存在则创建,存在则报错】 a, 追加模式【可读; 不存在则创建;存在则只追加内容】 "+" 表示可以同时读写某个文件 r+, 读写【可读,可写】 w+,写读【可读,可写】 x+ ,写读【可读,可写】 a+, 写读【可读,可写】 "b"表示以字节的方式操作 rb 或 r+b wb 或 w+b xb 或 w+b ab 或 a+b 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码
Table 文件对象方法
方法 | 描述 |
f.close() | 关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。 |
f.fileno() | 获得文件描述符,是一个数字 |
f.flush() | 刷新输出缓存 |
f.isatty() | 如果文件是一个交互终端,则返回True,否则返回False。 |
f.read([count]) | 读出文件,如果有count,则读出count个字节。 |
f.readline() | 读出一行信息。 |
f.readlines() | 读出所有行,也就是读出整个文件的信息。 |
f.seek(offset[,where]) | 把文件指针移动到相对于where的offset位置。where为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。 |
f.tell() | 获得文件指针位置。 |
f.truncate([size]) | 截取文件,使文件的大小为size。 |
f.write(string) | 把string字符串写入文件。 |
f.writelines(list) | 把list中的字符串一行一行地写入文件,是连续写入文件,没有换行。 |
read(3)代表读取3个字符,其余的文件内光标移动是以字节为单位,如:seek,tell,read,truncate f.flush() #讲文件内容从内存刷到硬盘(python3.x) f.closed #文件如果关闭则返回True f.encoding #查看使用open打开文件的编码 f.tell() #查看文件处理当前的光标位置 f.seek(3) #从开头开始算,将光标移动到第三个字节 f.truncate(10) #从开头开始算,将文件只保留从0-10个字节的内容,文件必须以写方式打开,但是w和w+除外。
感谢您的来访,获取更多精彩文章请收藏本站。

暂无评论内容