前言:在Python编码中,我们经常会遇到去操作文件的读取和写入,这一方法属于是必备的操作技巧了,现在就一起来康康要怎么操作吧

一、open 函数

        python 提供内置函数 open()实现对文件的操作。python 对文本文件和二进制文件采用统一的操作步骤,和把大象放冰箱里的一样分三步,"打开-操作-关闭。"

open(file, mode='r', encoding=None)

#file 包含文件名的字符串,可以是绝对路径,可以是相对路径。
#mode 一个可选字符串,用于指定打开文件的模式。默认值 r 表示文本读。
#encoding 文本模式下指定文件的字符编码

a)mode参数:

字符       意义
'r'       文本读取(默认)
'w'       文本写入,并先清空文件(慎用),文件不存在则创建
'x'       文本写,排它性创建,如果文件已存在则失败
'a'	      文本写,如果文件存在则在末尾追加,不存在则创建

a)和 mode 组合的字符:

字符	意义
'b'	    二进制模式,例如:'rb'表示二进制读
't'	    文本模式(默认),例如:rt 一般省略 t
'+'	    读取与写入,例如:'r+' 表示同时读写

c)总结图

二、读文件

  2.1在当前目录下创建一个名为 a.txt 的文本文件,文件中写入下面的内容:

这里是第一行句子
这是是第二行句子
这里是第三行句子

读取的文本图例:

 ——操作步骤:

#open打开文件
fb = open(file=r"C:\Users\LX\PycharmProjects\pythonProject\web_study\a.txt",mode="r",encoding="utf-8")
#读取文件
ct = fb.read()
#打印文件内容
print(ct)
#手动关闭文件
fb.close()

响应:

这里是第一行句子
这是是第二行句子
这里是第三行句子

2.2 相对路径与绝对路径:

#进行文件处理时经常会碰到相对路径和绝对路径的问题
#打开文件,读取数据。文件的完整路径必须存在,不然就会报错
——————————————————————————————————————————————————————————————————
绝对路径:它指定了文件在电脑中的具体位置,以 windows 电脑为例:
d:\class\demon\python入门.py

相对路径:一般是指相对当前脚本的路径,比如上面的案例中的 a.txt
#相对路径的写法:
#为和当前脚本在同一个文件夹下,所以可以直接使用 test.txt 作为文件名来操作。
with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:
    #读取文件
    ct = fb.read()
    #打印文件内容
    print(ct)

2.3 with上下文管理:解决经常会忘记关闭文件句柄,造成资源浪费,所以处理文件是往往使用 with 语句进行上下文管理

with + open(文件地址)as 函数名:
不需要你手动调用fs.close()
自动帮你关闭文件

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:
    ct = fb.read()
    print(ct)

2.4多种读文件的方式:

 a)read()

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:
    ct = fb.read() 
    print(ct)


响应:

这里是第一行句子
这是是第二行句子
这里是第三行句子
#在读模式下,使用文件对象的 read 方法可以读取文件的内容。它接收一个整数参数表示读取内容的大小,文本模式下表示字符数量,二进制模式下表示字节大小。

with open('a.txt', 'r', encoding='utf-8') as f:
    content = f.read(3)
    print(content)


响应:共计三个字符
我是新

b)readline()

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:
    vt = fb.readline()
    print(vt)


#响应:
这里是第一行句子

c)readlines()

with open(file=r"a.txt",mode="r",encoding="utf-8") as fb:
    bt = fb.readlines()
    print(bt)


响应:"\n"换行符的字符体现,读出来就是这样表现

['这里是第一行句子\n', '这是是第二行句子\n', '这里是第三行句子\n']

d)二进制读取:# mode=rb,不需要encoding参数

# mode=rb,不需要encoding参数
with open(file=r"a.txt",mode="rb") as fb:
    content  =fb.read()
    print(content)


#响应:
b'\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe7\xac\xac\xe4\xb8\x80\xe8\xa1\x8c\xe5\x8f\xa5\xe5\xad\x90\r\n\xe8\xbf\x99\xe6\x98\xaf\xe6\x98\xaf\xe7\xac\xac\xe4\xba\x8c\xe8\xa1\x8c\xe5\x8f\xa5\xe5\xad\x90\r\n\xe8\xbf\x99\xe9\x87\x8c\xe6\x98\xaf\xe7\xac\xac\xe4\xb8\x89\xe8\xa1\x8c\xe5\x8f\xa5\xe5\xad\x90\r\n'

二、写文件

a)mode="w":

with open(file=r"a.txt",mode="w",encoding="utf-8") as fb:
    fb.write("我是新写入的内容")


文本内容:

我是新写入的内容

运行后会发现之前 a.txt 内容修改为“我是新写入的内容”,因为 w 模式会清除原文件内容,所以小心使用。

b)mode="a":

#\n代表换行符,使用就换行
with open(file=r"a.txt",mode="a",encoding="utf-8") as fb:
    fb.write("我是第二次写入的内容\n")



文本内容:

我是新写入的内容
我是第二次写入的内容

c).写二进制文件:将图片二进制信息写入文件中,并存到本地。


import requests

url = 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1247698508,1430079989&fm=26&gp=0.jpg'

response = requests.get(url)

with open('校花.jpg', 'wb') as f:
    f.write(response.content)

c)结果图例:

三、tell 方法:文件对象的 tell 方法返回整数,表示文件指针距离文件开头的字节数

with open('a.txt', 'r', encoding='utf-8') as f:
    print(f.tell()) #文件指针距离文件开头的字节数
    content = f.read(3)
    print(content)
    print(f.tell())#文件指针距离文件开头的字节数


响应:

0
我是新
9

四、seek 方法:通过文件对象的 seek 方法可以移动文件句柄

seek 方法接收两个参数:

offset 表示偏移指针的字节数
whence 表示偏移参考,默认为 0
0 表示偏移参考文件的开头,offset 必须是 >=0 的整数
1 表示偏移参考当前位置,offset 可以是负数
2 表示偏移参考文件的结尾,offset 一般是负数

注意文本模式下只允许从文件的开头进行偏移,也即只支持 whence=0

with open('a.txt', 'r', encoding='utf-8') as f:
    print(f.read(3))
    # 跳转到文件开头
    f.seek(0)
    # 再读取第一个字
    print(f.read(1))

#响应:
我是新
我

来源:小阿卷呀

物联沃分享整理
物联沃-IOTWORD物联网 » Python文件操作

发表评论