Python入门学习 DAY 07 (文件操作)

Python入门     

DAY 07

文件操作

1 什么是文件
    文件是操作系统为用户/应用程序提供的一种操作硬盘的抽象单位
2 为何要用文件
    用户/应用程序对文件的读写操作会由操作系统转换成具体的硬盘操作
    所以用户/应用程序可以通过简单的读\写文件来间接地控制复杂的硬盘的存取操作
    实现将内存中的数据永久保存到硬盘中
    user=input('>>>>: ') #user="egon"
3 如何用文件
    文件操作的基本步骤:
        f=open(...) #打开文件,拿到一个文件对象f,f就相当于一个遥控器,可以向操作系统发送指令
        f.read() # 读写文件,向操作系统发送读写文件指令

        f.close() # 关闭文件,回收操作系统的资源
    上下文管理:
        with open(...) as f:
            pass

with open('a.txt',mode='rt',encoding='utf-8') as f:
    data=f.read()
    print(data,type(data))

一 文件的打开模式
    r: 只读模式(默认的)

         1 当文件不存时,会报错
         2 当文件存在时,文件指针指向文件的开头


    w: 只写模式

        1 当文件不存时,新建一个空文档
        2 当文件存在时,清空文件内容,文件指针跑到文件的开头

       可读可写:
         r+t

         w+t

         a+t

    a: 只追加写模式

        1 当文件不存时,新建一个空文档,文件指针跑到文件的末尾
        2 当文件存在时,文件指针跑到文件的末尾

二 控制读写文件单位的方式(必须与r\w\a连用)
    t : 文本模式(默认的),一定要指定encoding参数
        优点: 操作系统会将硬盘中二进制数字解码成unicode然后返回
        强调:只针对文本文件有效

    b: 二进制模式,一定不能指定encoding参数

文件内的指针移动

文件内指针移动,只有t模式下的read(n),n代表的字符的个数
除此以外文件内指针的移动都是以字节为单位

在t模式下,read(1)就是读取一个字符

 with open('a.txt',mode='rt',encoding='utf-8') as f:
     msg=f.read(1)
     print(msg)

 在b模式下,read(3) 就是读取3个字节

with open('a.txt',mode='rb') as f:
     msg=f.read(3)
     print(msg.decode('utf-8'))

f.seek(offset,whence)有两个参数:
offset: 代表控制指针移动的字节数
whence: 代表参照什么位置进行移动
        whence = 0: 参照文件开头(默认的),可以在t和b模式下使用
        whence = 1: 参照当前所在的位置,必须在b模式下用
        whence = 2: 参照文件末尾,必须在b模式下用

文件修改的两种方式

方式一:
# 1 将文件内容由硬盘全部读入内存
# 2 在内存中完成修改
# 3 将内存中修改后的结果覆盖写回硬盘

# 优点: 在文件修改的过程中硬盘上始终一份数据
# 缺点: 占用内存过多,不适用于大文件

# with open('d.txt',mode='rt',encoding='utf-8') as f:
#     all_data=f.read() #读取f并赋值给all_data

# with open('d.txt',mode='wt',encoding='utf-8') as f:
#     f.write(all_data.replace('a','b')) #将文件的a 全部替换成b并写入d.txt文件

方式二:

# 1 以读的方式打开源文件,以写的方式打开一个临时文件
# 2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕
# 3 删掉源文件,将临时文件重命名为源文件名

# 优点: 同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存
# 缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,

# import os
# with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f:
#     for line in read_f:
#         write_f.write(line.replace('a','b'))
# os.remove('d.txt')
# os.rename('.d.txt.swap','d.txt')

以上为本次学习内容,如何疑问欢迎指出

猜你喜欢

转载自blog.csdn.net/sql121407/article/details/81240647