Python的文件读写
在Python中,通过打开文件生成一个文件对象【文件描述符】操作磁盘上的文件,操作主要由文件读写。普通文件包含:txt文件,图片,视频,音频等。
读文件
读取文件步骤:
a.打开文件:open() ,使用Python内置的open()函数 创建一个file对象,相关的方法才可以调用它进行读写。
b.读取文件内容:read()
c.关闭文件:close() 注意:最后一定不要忘了文件关闭,避免系统资源的浪费 【一个文件对象会占用系统资源】
那么我们先看下open()函数的格式:
格式:
open(path,flag[,encoding,errors])
path 文件的路径
flag 打开方式 有如下几种写法mode 参数有:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
默认为文本模式,如果要以二进制模式打开,加上 b 。encoding:编码格式:gbk,utf-8
errors:错误处理
简单写法:
格式:
with open() as 变量 :
优点:
可以自动关闭文件,避免忘记关闭文件导致的资源浪费
#定义文件的绝对路径
path = “c:\爱或不爱.txt”
#通过路径打开文件
f = open(path,“r”,encoding=“gbk”)
注意:如果打开的文件是图片,音频或者视频等,打开方式采用rb,但是,此时,不能添加encoding=“xxx”
File对象的属性
当一个文件被打开后,我们就获取到了一个file对象,进而就可以得到有关该文件的各种信息。以下file对象相关的所有属性的列表
file.closed | 返回true如果文件已被关闭,否则返回false。 |
---|---|
file.mode | 返回被打开文件的访问模式。 |
file.name | 返回文件的名称。 |
file.softspace | 如果用print输出后,必须跟一个空格符,则返回false。否则返回true。 |
我们来随便写一个文件感受下File对象的属性,代码示例如下:
# 打开一个文件
fo = open("Test.txt", "w")
print ("文件名: ", fo.name)
print ("是否已关闭 : ", fo.closed)
print ("访问模式 : ", fo.mode)
执行结果如下:
> python Mypython-30-1.py
文件名: Test.txt
是否已关闭 : False
访问模式 : w
读文件
a 读取全部内容 print(f.read()) #字符串
b 从文件读取指定的字节数,如果未给定或为负则读取所有。【\n也算一个字符】
str2 = f.read(2)
print(str2)
c 读取一行数据
print(‘按行读1:’,f.readline())
print(‘按行读2:’,f.readline())
f.seek(0) # 移动光标到文件开头
print(f.read())
d 读取全部数据,返回一个列表
str4 = f.readlines()
print(str4)
下面我们来写一个读取图片的示例
path = "c:\jbb.jpg"
with open(path,"rb") as f:
str2 = f.read()
print(str2)
f = open('mm.jpg','rb')
data = f.read()
写文件
写文件操作步骤
a.打开文件:open()
b.写入数据:write()
c.刷新管道【内部缓冲区】:flush()
d.关闭文件:close()
a 打开文件
path = “c:\jbb.txt”
f = open(path,“w”,encoding=“utf-8”)
注意:写入文件的时候,文件可以不存在,当open的时候会自动创建文件;读取文件的时候,文件必须先存在,才能open
b 写入数据
f.write(“最可爱啦~\n”)
注意:将数据写入文件的时候,默认是没有换行的,如果向换行,则可以手动添加\n
c 刷新数据缓冲区
f.flush()
作用:加速数据的流动,保证缓冲区的流畅
d 关闭文件
f.close()
下面看一个案例,我们提前建好一个文件test.txt 文件,读取到其中的内容 并打印出来,然后再写一句话进去,代码示例如下:
Path="C://Users//broker//Desktop//Python学习//Test01.txt"
with open(Path,"r+") as f:
str2 = f.read()
print(str2)
f.write("文本结束!\n")
f.flush()
下面再看csv文件的读写,csv是 一种文件格式,.csv,本质是一个纯文本文件,可以作为不同程序之间数据交互的格式,可以用 记事本,excel 打开。
读csv文件
代码示例如下:
#引入csv模块
import csv
path = "C://Users//broker//Desktop//Python学习//Test02.csv"
#打开文件
csvFile = open(path,"r")
#将文件对象封装成可迭代对象
reader= csv.reader(csvFile)
#读取文件内容
#遍历出来的结果为列表
for item in reader:
print(item)
#关闭文件
csvFile.close()
当然也可换成简单的写法:
#引入csv模块
import csv
path = "C://Users//broker//Desktop//Python学习//Test02.csv"
with open(path,"r") as f:
reader = csv.reader(f)
for item in reader:
print(item)
写csv文件
import csv
path = "C://Users//broker//Desktop//Python学习//Test03.csv"
infoList = [['name', 'age', 'address'],
['zjb', '22', 'china'],
['sdd', '18', 'china']]
# 1.打开文件
# 注意:如果不设置newline,每一行会自动有一个空行
csvFile = open(path,"w",newline="")
# 2.将文件对象封装成一个可迭代对象
writer = csv.writer(csvFile)
# 3.写入数据
for item in infoList:
writer.writerow(item)
# 4.关闭文件
csvFile.close()
简单写法:
import csv
path = "C://Users//broker//Desktop//Python学习//Test03.csv"
infoList = [['name', 'age', 'address'],
['zjb', '22', 'china'],
['sdd', '18', 'china']]
with open(path,"a",newline="") as csvFile:
writer = csv.writer(csvFile)
for i in range(len(infoList)):
writer.writerow(infoList[i])