Tiny_Lu
不忘初心

Day 09 文件处理

什么是文件

文件就是操作系统提供的虚拟单位

绝对路径与相对路径

  • 绝对路径是从盘符开始的路径
  • 相对路径是当前执行文件所在的文件夹开始找

文件打开的三种模式

如果我们需要打开一个文件,需要向操作系统发起请求,要求操作系统打开文件,占用操作系统资源。Python中使用open()方法可以打开某个具体的文件,open()方法内写入文件路径。

open('E:\typora\Note\Class\Day09\user_info.txt')

打开文件之后,文件不仅占用了内存,他还对应了操作系统打开的以文件,相当于使用文本编辑器打开了一个文件。并且我们说了我们操控文件只是为了读和写,因此打开文件并不是目的,读和写才是目的,接下来我们尝试如何读写文件。

文件打开模式之r模式

r:read,只读模式,只能读不能写,文件不存在时报错

f = open('user_info.txt', mode = 'r', encoding='utf8')
print(f.readable())
print(f.writable)
f.close()

True
False

f = open('user_info.txt', mode = 'r', encoding='utf8')
data = f.read()
print(data)
f.close()

tiny 123

f.read()读取文件指针会跑到文件的末端,如果再一次读取,读取的将是空格。

f = open('user_info.txt', mode = 'r', encoding='utf8')
data1 = f.readline()  # 读取一行
data1 = f.readlines()  # 一行一行的读取
f.close()

文件打开模式之w模式

w:write,只能写,不能读,文件已存在会清空文件再写入数据;文件不存在的时候会创建文件后写入数据

f = open('user_info.txt', mode = 'w', encoding='utf8')
print(f.readable())
f.write('tiny,你好帅啊')
f.flush()  ## 快速保存
f.close()

False

f = open('user_info.txt', mode = 'r', encoding='utf8')
data = f.read()
print(data)
f.close()

tiny,你好帅啊

文件打开模式之a模式

a:append,只能追加,不能读,在文件的末端追加写入内容;文件不存在的时候会创建文件追加写入内容

f = open('user_info.txt', mode = 'a', encoding='utf8')
print(f.readable())
f.write('tiny,233')
f.write(' tiny')
f.close()

False

f = open('user_info.txt', mode = 'r', encoding='utf8')
print(f.read())

tiny,你好帅啊tiny,233 tiny

文件打开的两种方式

t方式,也就是文本的大开方式一般与三种打开模式连用,可以省略不写,事实上上面的'r','w','a'模式都是把t省略了

还有一中方是b(bytes)方式,是以二进制的方式来打开文件,一般用来打开图片/音频/视频,b模式读取文件,一定不能加上encoding参数,因为二进制无法再编码

with管理文件上下文

上面我们用open()的方法来打开文件,但是每次处理文件需要用到close()才能手动释放文件对操作系统的占用,

下面介绍一下更简单的方法,利用with open()管理文件上下文.

with open('user_info.txt', 'rt', encoding='utf8') as f:
    print(f.read())

tiny 123

with open()方法不仅提供自动释放操作系统占用的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝.

with open('user_info.txt', 'rb') as fr, \
        open('xxx.txt', 'wb') as fw:
    f.write(f.read())

文件的高级应用

可读、可写

  • r+t:可读、可写
  • w+t:可写、可读
  • a+t:可追加、可读

文件内指针移动

  1. seek(offset,whence):offset代表指针的偏移量,偏移量的单位是字节,whence可以为0,1,2,0 表示从文件头开始,1 表示当前文件所在位置,3 相当于文件末尾
  2. tell():每次统计都是文件开头到当前指针所在位置
  3. read(n):只有read()的n表示字符字符个数,从文件头开始读取n个字符
  4. truncate():截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件

文件的两种修改方式

文件的数据是放在硬盘上的,因而只存在覆盖,不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式

方式一

with open('user_info.txt', 'r', encoding='utf8') as fr:
    data = fr.read()
    data = data.replace('tiny', 'Tiny')
    
with open('user_info_change.txt', 'w', encoding='utf8') as fw:
    fw.write(data);

import os

# 删除原文件
os.remove('user_info.txt')
# 重命名
os.rename('user_info_change.txt', 'user_info.txt')

方式二

with open('user_info.txt', 'r', encoding='utf8') as fr: \
    with open('user_info_change.txt', 'w', encoding='utf8') as fw:
        for i in fr:
            data = i.replace('tiny', 'Tiny')
            
        fw.write('data')
        
# 删除原文件
os.remove('user_info.txt')
# 重命名
os.rename('user_info_change.txt', 'user_info.txt')
posted @ 2019-09-18 18:47  二二二二白、  阅读(127)  评论(0编辑  收藏  举报