一 文件介绍
1.什么是文件
狭义说:文本文件;广义说:超文本文件, 图片,声音,超链接,视频。
2.文件的分类
文件大体上可以分为两类,文件文件和二进制文件。
3.文件的作用
使用文件的目的是把一些数据存储存放起来。
4.使用文件的流程
我们操作一个文件的流程一般是打开文件,读写文件,关闭文件。通过程序操作文件的流程也是这三步,首先打开文件,然后读写文件,最后关闭文件
二 读写文件简单操作
基于文件的操作 有如下方法 我们通过代码会列举介绍
读取操作 | r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 | |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 | |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 | |
写操作 | w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 | |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 | |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 | |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 | |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 | |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
1 读文件 read
r
file = open('file/a.txt',mode = 'r')
ret = file.read() #读取文件中的所有内容
print(ret)
file.close()
file叫做文件句柄,或者文件对象 用来操作文件
第一个参数是文件的路径,第二个参数 mode= 是访问文件的模型 r 表示读 默认也是r 模式
rb
file = open('121.jpg',mode='rb')
ret = file.read()
print(ret)
file.close()
"""
b'\xff\xd8\xff\xe1\x000Exif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x01\x011\x00\x02\x00\x00\x00\x0e\x00\x00\x00\x1a\x00\x00\x00\x00www.meitu......
"""
r+
file = open('aa.txt',mode='r+')
ret = file.read()
print(ret)
file.close()
"""
abcdefg #指会放在文件的开头,下次操作时时会从光标处开始
hijklmn
"""
2 写操作 wirte
w 只用于写入
注意 1文件不存在,会创建文件(不会创建目录) 2 会覆盖掉源文件的内容重新写入
file = open('1ji/bb.txt',mode='w')
file.write('zzz')
file.close()
w+ 可用于读写 其他作用和w一致
file = open('1ji/bb.txt',mode='w+')
file.write('zzzaaa')
ret = file.read() #读出的内容为空 因为光标的位置在最后
print(ret)
file.close()
a 追加 和 w不同的是,a 所添加的内容是追加在文件后边的,不会覆盖之前文件的内容 同样,如果文件不存在,则会创建一个新的文件
file = open('1ji/bb.txt',mode='a')
file.write('zzzaaa')
file.close()
a+ a+可以进行读写
file = open('1ji/bb.txt',mode='a+')
file.write('zzzaaa')
ret = file.read() #读出的内容为空 因为光标的位置在最后
print(ret)
file.close()
具体操作
read()
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,会容易导致程序卡死,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容
file = open('aa.txt')
ret = file.read(3)
print(ret)
file.close()
readline()
readline 每次读取一行,并且自带换行功能,每一行末尾会读到\n
file = open('1ji/bb.txt')
ret = file.readline()
print(len(ret))
print(ret)
print(file.readline())
print(file.readline(3))
file.close()
"""
6
qwert
asdaa
"""
readlines()
一次性以行的形式读取文件的所有内容并返回一个list,需要去遍历读出来
file = open('1ji/bb.txt')
ret = file.readlines()
print(ret)
'''
['qwert\n', 'asdaa\n', 'ssssa']
'''
循环读取
file句柄是一个可迭代的对象,因此,可以循环读取文件中的内容 每次只读一行
file = open('1ji/bb.txt')
for line in file:
print(line)
qwert
asdaa
ssssa
write()
file = open('1ji/bb.txt',mode='w')
file.write('aaaaa')
file.write('bbb')
file.close()
writelines()
file.writelines(seq) 把seq的内容全部写到文件中(多行一次性写入)
file = open('1ji/bb.txt',mode='w')
lst = ['aa\n','bb','cc']
file.writelines(lst)
file.close()
"""
aa
bbcc
"""
其他操作
1 tell
获取文件当中当前光标所在的位置
file = open('1ji/bb.txt',mode='r')
ret = file.read(3)
pos = file.tell()
print(pos)
print(ret)
file.close()
"""
4
aa
"""
seek()
seek 移动光标位置
参数:
offset 移动的长度(字节)
whence 相对位置 0 从头(默认),1从当前 2从末尾
file = open('1ji/bb.txt',mode='r')
print(file.read(3))
# file.seek(0,0)
file.seek(0,1)
# file.seek(0,2) #空
ret= file.read(3)
print(ret)
file.close()
name 和 mode
file.name 返回 路径
file.mode 返回 文件读写模式
file = open('1ji/bb.txt','r')
print(file.name) #返回路径 1ji/bb.txt
print(file.mode) # r
file.close()
with
使用with方式操作文件,可以不用关闭文件,会自动关闭文件。
with open('1ji/bb.txt') as file:
ret = file.read()
print(ret)
乱码
python读写文件时,默认使用的编码为平台编码,也就是gbk。
在pycharm中创建的文件默认使用的是utf-8编码
1,往pycharm中的1ji.bb中保存内容
with open('1ji/bb.txt',mode='w',) as file:
file.write('哈哈')
2 向磁盘中文件保存内容能,不乱码。
指定编码
with open('1ji/bb.txt',mode='w',encoding='utf-8') as file:
file.write('哈哈')