Python学习之路——文件


文件在作为计算机的重要组成部分,程序本质上也是文件。很多时候我们需要将数据保存到本地,这个时候就需要对文件进行操作。

一、打开文件

在Python中,我们利用open()函数来打开一个文件。

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
  • file:文件路径"
  • encoding:读取文件的编码格式,默认为"UTF-8"
  • buffering: 设置缓冲
  • mode:打开文件的模式
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener:自定义开启器

文件路径分为绝对路径和相对路径:
相对路径:如果目标文件和当前文件在同一级目录下,则直接使用文件名即可打开
绝对路径:从根目录开始书写,每一级直接用"/"隔开

打开文件的模式

t文本模式 (默认)
x模式(新建一个文件,如果该文件已存在则会报错 )
b二进制模式
+打开一个文件进行更新(可读可写)
r只读方式打开文件,文件的指针在文件的开头(默认)
rb二进制格式打开一个文件用于只读,文件指针在文件的开头(默认模式)
r+打开一个文件用于读写,文件指针在文件的开头
rb+二进制格式打开一个文件用于读写。文件指针在文件的开头
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑原有内容会被删除。如果该文件不存在,创建新文件
wb二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件
wb+二进制格式打开一个文件用于读写。如果该文件存在则打开文件,并从开头开始编辑,原有内容会被删除。如果该文件不存在,创建新文件
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
ab二进制格式打开一个文件用于追加。如果该文件存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
ab+二进制格式打开一个文件用于追加。如果该文件存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

open函数会返回一个对象,该对象代表当前打开的文件。

二、关闭文件

当文件操作完毕后应当关闭文件,如果不关闭文件则会一直占用系统内存资源。
利用close()方法关闭文件

# 打开文件
f = open('python.txt', 'r')
# 关闭文件
f.close()

三、with语句

在Python中我们可以利用with语句打开文件。利用with语句打开文件,当文件操作完毕后自动关闭文件,不需要我们手动关闭,推荐在实际编写过程中使用with语句打开文件。

with open('Python.txt', 'r') as f:
	pass

# 和上述代码功能相同
f = open('Python.txt', 'r')
f.close()

四、文件的读写

一般文件的读写

读取文件:先将文件打开模式设置为可读取,再利用read()方法进行读取文件内容。
read()方法在读取文件时会一次性读取文件的所有内容,将它放到缓冲区。
写入文件:先将文件打开模式设置为可写入,再利用write()方法进行读取文件内容。write()方法可以将字符串写入文件中,并返回写入字符串地长度。

# 以读写模式打开文件
with open('Python.txt', 'w+') as f:
	# 写入文件
	f.write('Python')
	# 读取文件
	file = f.read()
print(file) # Python

大型文件的读写

由于read()和write()会一次性读取和写入文件,当文件较大时如果选择一次性读写,那么很有可能会造成内存资源消耗完毕,长时间停留在此操作,导致程序出现崩溃。
为了解决这个问题,我们选择在读写文件时进行限流处理,限制每一次读写文件的数量,以此来避免出现内存占用完毕的现象。

读取优化

设置size对read()方法限流
read()方法中可以接收一个size参数,这个参数代表了本次读取的文件的多少;
默认值为-1,代表读取整个文件;
当读取模式为文本模式时,size代表字符数量,当为二进制文件时,size代表字节数量。如果剩余数量小于size,那么则会将剩下的全部读取;
read()方法每一次读取文件,都会从上一次读取结束位置开始。

with open('Python.txt', 'r') as f:
	file = ""
	while True:
		# 每次读取十个字符
		content = f.read(10)
		if not content:
			break
		file += content
	print('文件读取完毕')

使用readline()和readlinse()方法进行限流
readline()和readlines()方法读取文件时都是一行一行地读取文件。readlines()读取文件后会将读取到地文件封装到列表中返回。

with open('Python.txt', 'r') as f:
	file = ""
	while True:
		# 每次读取十个字符
		content = f.readline()
		if not content:
			break
		file += content
	
	# 效果一样
	content = f.readlines()
	for i in content:
		file += i
	print('文件读取完毕')
写入优化

利用writelines()方法写入文件,该方法在写入字符串时会进行迭代操作,以换行符为分隔进行迭代。

with open('Python.txt', 'w') as f:
	f.writelines('P\ny\n') # 内部写入时会分两次写入

文件指针操作

tell():返回文件的当前位置

with open('Python.txt', 'w+') as f:
	f.write('1:Python\n2:C++')
	print(f.readline())
	print('当前位置:', f.tell())

seek():用于移动文件读取指针到指定位置
语法:fileObject.seek(offset[, whence])
offset: 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。

with open('Python.txt', 'w+') as f:
	f.write('1:Python\n2:C++')
	a = f.readline()
	print(a) # 1:Python
	f.seek(10, 0)
	b = f.readline()
	print(b) # 1:Python

五、os模块

os 模块是Python地一个内置模块,它提供了非常丰富的方法用来处理文件和目录。
常用方法:

  • listdir() :获取当前目录结构
  • chdir():切换盘符
  • getcwd() :获取当前所在的目录
  • mkdir():创建目录 在当前目录创建
  • rmdir():删除目录
  • open():打开文件,设置打开选项,mode参数可选
  • remove():删除指定路径的文件
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值