在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.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])



