Python的文件读写

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])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值