6.文件操作
6.1 什么是文件操作?
文件操作系统给用户/应用程序提供的一个虚拟的概念,如何在程序中打开一个文件,在程序中写入代码即可编辑文件
6.2怎么操作文件?
6.2.1 文件操作的基本流程
文件操作的基本流程:
- 打开文件
- 操作文件 读、写文件
- 关闭文件
6.3文件操作的二种模式
open() 的方法 常用的语法格式如下
open( file , mode = ’ r ’ , encoding = utf-8 )
file = 必需写的 ,文件的路径 ,如果只写名称不写盘符 则要在程序同目录下
mode = 可选 ,文件的打开模式
encoding = 一般utf-8 就可以了,是转换成中文形式,二进制模式下不需要写
#常用的是第二种,他会自动帮我们关闭文件,有时候我们会忘记写f.close()
1.f = open('a.txt','r') #不会自动关闭文件 需要f.close()
2.with open ('a.txt','r',encoding='utf-8') as f:
print()
#第二种还可以写两次 open()一次读或者一次写都可以随意
with open ('a.txt','r',encoding='utf-8') as read_f,\
open ('b.txt','w',encoding='utf-8') as write_f:
res = read_f.read() #读取a文件写去b中
write_f.write(res) #f.close()文件句柄帮我们关闭
其他详细规范如下:
6.3.1常用的 文件操作的模式:
模式 | 描述 |
---|---|
r | 只读的方式打开文件,文件的指针默认放在文件的开头;也是默认模式。 |
rb | 二进制的方式打开一个文件,只读,也是指针放在开头,适合除了文字之外图片等。 |
r+ | 打开一个文件,读写。文件指针放在开头 |
rb+ | 二进制的方式打开一个文件,读写,也是指针放在开头,适合除了文字之外图片视频MP3等。 |
w | 写入的方式打开文件,如果文件存在,内容会被删除重新编辑;如果文件不存在的话,就会新建这个文件 |
w+ | 读写的方式打开文件,如果文件存在,内容会被删除重新编辑;如果文件不存在的话,就会新建这个文件 |
wb | 二进制的方式的方式打开文件只用来写入,如果文件存在,内容会被删除重新编辑;如果文件不存在的话,就会新建这个文件。一般适用于非文字的图片视频MP3等。 |
wb+ | 二进制的方式的方式打开文件用来读写,如果文件存在,内容会被删除重新编辑;如果文件不存在的话,就会新建这个文件。一般适用于非文字的图片视频MP3等。 |
b | 二进制模式 |
a | 追加的方式打开文件,如果文件存在,指针放在文件的结尾,新的内容将写在之前的内容之后;如果文件不存在的话,就会新建这个文件 |
ab | 二进制的方式打开文件用于追加,如果文件存在,指针放在文件的结尾,新的内容将写在之前的内容之后;如果文件不存在的话,就会新建这个文件用于写入 |
ab+ | 二进制的方式打开文件用于追加,如果文件存在,指针放在文件的结尾,新的内容将写在之前的内容之后;如果文件不存在的话,就会新建这个文件用于读写 |
带+号的 | 可写可读,但是不常用 |
6.3.2 文件的读取和定位
#读操作
f.read() #读取所有内容 f.read(4) 读取前四个字,里面填写个数
f.readline() #读一行
f.readlines() #读所有 每一行存放在列表里面
f.tell() #告诉指针的位置,,也可以查看文章里面所有的字节
f.seek(offset, from) # f.seek(3,0) 就是在第四个字节之后读取
'''' offset :文件指针偏移量
from : 0-文件开头 1-当前位置 2-文件末尾(这里的0,1,2只是代表了文件位置,而不是说0,1,2可以参与指针偏移的计算。from 是可选项,默认为0.目前接触到的知识,'''
#写操作
f.write()
-
例如我们在同目录下有一个文件“文件操作测试”记事本,内容歌词如下
-
接下来我们用代码读取它的内容
with open(r'文件操作测试.txt', mode='r', encoding='utf-8')as f: #我们读取里面的所有内容,
如果用w模式的话则会发现里面的内容全消失
print('第一次读'.center(50, '*'))
res = f.read() # 把所有内容从硬盘读到内存
print(res)
- 运行结果:
- 内容已经被我们在没有打开文件复制的前提下读出来了,同理其他模式的操作也如此,多试几次就熟练了.
6.3.3文件操作 的判断操作
'''
with open('123.txt','r',encoding='UTF-8') as f :
print(f.readable()) #判断文件是否可读
print(f.writable()) #判断文件是否可写
print(f.name ) #判断文件是否可写
print(f.encoding) #判断文件是否可写
print(f.closed) #文件是否关闭
print(f.tell())
'''
6.4 文件的修改
有时候我们需要将某个文件里面的名称字符换掉
#第一种 先读后写
with open ('文件操作测试.txt','r',encoding='utf-8') as f :
data=f.read()
with open ('文件操作测试.txt','r+',encoding='utf-8') as f :
f.write(data.replace('我','666')) #将我替换成666
print((data))
运行结果:
#第二种 创建一个新文件 原文件不动
# 在创建一个新的文件 源文件不动
with open ('文件操作测试.txt','r',encoding='utf-8') as read_f,\
open ('b.txt','w',encoding='utf-8') as write_f:
for line in read_f: # 用 line 去读取 每行读到了内容
write_f.write(line.replace('我去','66')) # 在将替换之后的内容 写入我们新创建的文件里面
结果如下:我们将得到两个文件,一个是修改之后的,一个是原文件
6.5模拟网上注册系统
name = input('username').strip() # 用户输入的名字放在 name里,如果不小心输入了空格,
我们strip()也可以自动删除首尾的空格
pwd = input('password').strip() #密码放在pwd里面
with open('注册.txt', 'at', encoding='utf-8')as f: #将注册好的信息放在一个记事本里面
info = '%s:%s\n'%(name, pwd)
f.write(info)