python基础:文件操作

一、文件介绍
1、什么是文件
狭义说:文本文件;广义说:超文本文件, 图片,声音,超链接,视频。
2、文件的分类
文件大体上可以分为两类,文件文件和二进制文件。
3、文件的作用
使用文件的目的是把一些数据存储存放起来。
4、使用文件的流程
我们操作一个文件的流程一般是 打开文件,读写文件,关闭文件。通过程序操作文件的流程也是这三步,首先打开文件,然后读写文件,最后关闭文件。

二、读写文件简单操作
1、读取文件

file 变量名  ---> 文件句柄,文件对象
file=open('a.txt',mode='r')
ret=file.read()  #将文件中所有内容一次性读取出来
# 最后要关闭文件
print(ret)
file.close()

file叫做文件句柄(变量)用来操作文件
第一个参数是文件的路径,
第二个参数 mode=访问文件的模型,r 表示读,默认也是r 模式

2、写文件

file=open('file/c.txt',mode='w')
file.write('abcdef')
file.close()

mode=‘w’ 表示写文件
注意:如果文件不存在,会自动创建文件(不会创建目录)。

三、文件权限
读取操作
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。

写操作
w 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。

追加操作
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

rb操作二进制文件

file=open('file/...',mode='rb')
ret=file.read()
print(ret)
file.close()

r+ 读写模式
如果文佳不存在r+模式不能自动创建文件
b.txt文件内容是 abcde

file=open('file/b.txt',mode='r+')
# 先写入
file.write('xxxx')    #会从头开始覆盖对应长度的内容,光标移动到覆盖内容后
# 后读取
ret=file.read()     #此时文件内容变为xxxxe,光标在e之前
print(ret)             #e

w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
b.txt文件内容是 abcde

file=open("file/b.txt",mode='w+')   
import time
time.sleep(5)
ret=file.read()        #读的时候先清空在读
print(ret)        此时b.txt已经被清空,不会读取任何内容
   # 先写再读
file=open("file/b.txt",mode='w+')
file.write('abcde')     在b.txt中加入了
position=file.tell()
print(position)      5

a模式
mode='a’表示往文件末尾写内容,不会删除内容,不能执行读的操作

file=open('file/a.txt',mode='a')
file.write('xxx')
ret=file.read()
#print(ret)    #只能写不能读
file.close()

ab 二进制:abc
以二进制格式打开一个文件用于追加。如果该文件已存在,
文件指针将会放在文件的结尾。也就是说,新的内容将会
被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
b.txt为空文件

file=open('file/b.txt',mode='ab')
file.write('abc'.encode())       b.txt中添加了  abc
#ret=file.read()      此方法为添加操作,无法读取
#print(ret)
file.close()

文件拷贝

file1=open('file/a.txt')  
file2=open('file/c.txt')
ret1=file1.read()   
file2.write(ret1)    将a.txt读出来写入b.txt

读操作:
readline()
readline每次读取一行,并且自带换行功能 每一行末尾会读到\n
readlines()
Readlines,一次性以行的形式读取文件的所有内容并返回一个list,需要去遍历读出来
循环读取
file句柄是一个可迭代的对象因此,可以循环读取文件中的内容,每次读一行。

写操作:
writelines()
file.writelines(seq) #把seq的内容全部写到文件中(多行一次性写入)。

tell()
tell获取文件当中当前光标所在的位置

file=open('file/b.txt',mode='ab')
file.write('abc'.encode())
ret=file.tell()
print(ret)   #6
在b.txt原有内容后添加了abc,此时光标移动到所有内容之后
file.close()

(3).seek()
seek移动光标位置
参数:
offset 移动的长度(字节)
whence 相对位置 0从开头(默认),1从当前,2从末尾

file=open('file/b.txt',mode='ab')
file.write('abc'.encode())
ret=file.tell()
print(ret)        #9
ret1=file.seek(0,0)    此时光标移动到开头
print(ret1)       #0
file.close() 

r模式下:
注意:r模式下,相对位置必须为0,不支持非0操作
file=open(‘b.txt’,mode=‘r’)
ret=file.read(3) #abc
print(ret)
file.seek(0,1) #r模式下,相对位置必须为0,不支持非0操作
file.seek(0,2) #跳到末尾
print(file.read(3)) #光标此时已经调到末尾,将不会读取任何内容
file.close()

rb模式下:

file=open('b.txt',mode='rb')
ret=file.read(3)    #b'abc'   开头的abc
print(ret)
file.seek(-3,2)
print(file.read(3)) #b'abc'   末尾的abc
file.close()

.name和mode
file.name 返回 路径
file.mode 返回 文件读写模式

file=open('b.txt',mode='rb')
print(file.name)  #返回 路径  b.txt
print(file.mode)  #返回 文件读写模式  rb
file.close()

乱码问题:
读写操作的编码不一致导致乱码。
默认编码是操作平台编码(gbk)

encodeing=’’ 指定编码格式

with open('file/c.txt',mode='w',encoding='utf-8') as f:
    f.write('你好,世界')
    print(f)
with open('file/c.txt',mode='r',encoding='utf-8') as f:
    ret=f.read()
    print(ret)     # 你好世界

猜你喜欢

转载自blog.csdn.net/weixin_44239541/article/details/86254943
今日推荐