Python 文件操作

一 文件操作的初识

我的理解:

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

结果:

微信截图_20200512132339.png

文件操作的写、追加
   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 非文本类型的文件

         以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如:图片,音频,视频等。

   988316-20190403110246435-1821025176.gif

  

举例说明:

我先以rb的模式将一个图片的内容以bytes类型全部读取出来,然后在以wb将全部读取出来的数据写入一个新文件,这样我就完成了类似于一个图片复制的流程。具体代码如下

    988316-20190403110246435-1821025176 (1).gif   

文件操作得整体总结 :

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+除外。

------本页内容已结束,喜欢请分享------

感谢您的来访,获取更多精彩文章请收藏本站。

© 版权声明
THE END
喜欢就支持一下吧
点赞0赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称 夸夸
夸夸
还有吗!没看够!
表情代码图片

    暂无评论内容