文件

什么是文件?

操作系统提供给你操作硬盘的一个工具

为什么要用文件?

因为人类和计算机要求永久保存数据

怎么用文件?

open("要打开的文件的相对路径/绝对路径")  #注意要加后缀名

在这里要说一下相对路径和绝对路径

相对路径:必须与当前py文件在同一及目录下,如下图打开a.txt,在这里a.txt和test.py是在同一级目录下

绝对路径:文件所在的目录到很目录的全部地址

with open(r'E:pythonproject001day07a.txt',mode='r',encoding='utf-8')as rf:
    print(rf.read())
# f = open("a.txt")
#
# print(f.readable())  # 判断当前文件是否可读
# print(f.writable())  # 判断当前文件是否可写
#
# # del f  # 回收变量资源
# f.close()  # 回收操作系统的资源

with会自动帮你回收操作系统的资源,无需自己操作

with open('a.txt',mode='r')as rf,open('a.txt',mode='w')as wf:  # with会自动帮你回收操作系统的资源,无需自己操作
    print(rf.readable())
    print(wf.writable())

打印结果:
True
True

rb:read bytes  把文件转换为二进制读出来

with open(r'th.jpg','rb')as f,open(r'b.png','wb')as wf:
    wdx = f.read()
    wf.write(wdx)
    print(wf.write(wdx))

打开文件的模式

r模式:只读,如果文件不存在,会报错

with open(r'dira.txt','r',encoding='utf-8')as f:
    print(f.readable())
    print(f.readline())  # 执行一次,打印一行内容
    print(f.readlines())    #一次性读取整个文件内容,并按行返回到list,方便我们遍历
    print(f.read())

w模式:只写,如果文件不存在,则新建文件,如果文件存在数据,会将数据清空,重新写入(慎用!)

with open(r'dira.txt','w',encoding='utf8')as f:
    print(f.writable())
    f.write('我贼帅!!')

a模式:追加写,如果文件内存在数据,会在已有数据后边追加数据,如果文件不存在,则新建文件

with open(r'dira.txt','a',encoding='utf8')as f:
    f.write('
对!我非常帅!!')

  r+:可读可写,如果文件不存在,报错,正在写的内容不显示,写完才会显示

with open('a.txt','r+',encoding='gbk') as f:
    f.write('我好帅I am handsome
')
    print(f.read())

这时打印是不显示的,但是a.txt文件里已经写入数据了

w+:可读可写,如果文件不存在,新建文件写入数据,正在写的内容不显示,写完才会显示(覆盖数据,慎用)

注意此时有三条数据,执行以下代码你会发现什么

 

with open('a.txt','w+',encoding='gbk') as f:
    f.write('我好帅I am handsome
')
    print(f.read())

 这时w+模式就会把原来的数据覆盖,所以要慎用!

a+:可读可写,如果文件不存在,新建文件写入数据,读取文件必须自行移动光标

with open('a.txt','a+',encoding='gbk') as f:
    f.write('我好帅I am handsome
')
    print(f.read(2))

文件内的光标移动

f.seek

f.seek有两个参数:offset和whence

offset:相对偏移度(光标移动的位数)

whence:指定光标位置从何开始

          whence有三个参数:0,1,2

     0:从文件开头

       1:从当前位置

    2:从文件末尾——这时offset就必须是负数或0

with open('a.txt','r',encoding='gbk')as f:
    f.seek(0,0)       # 光标移动的位数为0,从文件开头
    print(f.read())   # 读取a.txt所有内容

f.tell:光标所在的位置

with open('a.txt','r',encoding='gbk')as f:
    f.seek(6,0)        # 光标移动的位数为6,从文件开头
    print(f.tell())    # 光标所在位置6
    print(f.read(4))    # 读取a.txt中从光标位置起,前四个字符

拓展练习:监视文字输入

新建py文件:输入信息文件

#coding=gbk
import time
res = time.strftime('%Y-%m-%d %H:%M:%S')
with open(r'a.txt','a',encoding='gbk')as f:
        f.write(f'{res}:马上要学函数了,有点难,怎么办
')

再建一个py文件:监视文件

#coding=gbk
import time

with open(r"a.txt", 'r', encoding='gbk')as f:
    f.seek(0, 2)  # 以文件末尾为参照点,移动0位
    while True:
        # time.sleep()
        res = f.readline()  # 一次读一行
        if res:  # 如果你读出数据了,就执行下面的代码块
            print(f'录入记录:{res}')


##PS:需要手动结束循环

 文件的修改

修改前a.txt中的数据

with open(r'a.txt','r',encoding='gbk')as f:
    data = f.read()
with open(r'a.txt','w',encoding='gbk')as f:
    res = data.replace('tank','DSB')
    f.write(res)

执行完代码后

 以上内容就是关于文件的内容

原文地址:https://www.cnblogs.com/aheng/p/11815010.html