python 的文件操作

本文详细介绍了Python文件读写的基本原理,包括使用open()函数打开文件、文件操作步骤以及文件打开模式。重点讨论了'r+', 'w+'和'a+'模式的区别,并展示了不同读取方法的使用,如read(), readline()和readlines()。最后,提到了文件操作的最佳实践——使用with语句,并简单介绍了Python中涉及文件夹操作的os和shutil模块。
摘要由CSDN通过智能技术生成
一、文件读写实现原理和操作步骤
1.文件读写实现原理

文件读写就是一种常见的IO操作,Python封装了操作系统底层接口,直接提供了文件读写相关操作方法。
通常高级编程语言会提供一个内置的函数,通过接收文件路径以及文件打开模式等参数来打开一个文件对象,并返回该文件对象的文件描述符。因此通过这个函数我们就可以获取要操作的文件对象了。这个内置函数就是open()。

2.文件读写操作步骤
  • 打开文件, 获取文件描述符
  • 操作文件描述符 读/写
  • 关闭文件
    文件读写操作完成之后,应该及时关闭,以避免占用操作系统的资源,同时操作系统对同一时间能打开的文件描述符的数量是有限制的。
二、文件打开模式

常见的文件打开模式有:只读,只写,可读可写,只追加。

文件打开模式描述
r以只读模式打开文件,并将文件指针指向文件头,如果文件不存在会报错
w以只写模式打开文件,并将文件指针指向文件头,如果文件存在则其内容清空,如果文件不存在则创建
a以只追加可写模式打开文件,并将文件指针指向文件尾部,如果文件不存在则创建
r+在r的基础上增加了可写功能
w+在w的基础上增加了可读功能
a+在a的基础上增加了可读功能
b读写二进制文件(默认是t,表示文本), 需要与上面几种模式搭配使用,如ab,wb,ab,ab+(POSIX系统, 包括Linux都会忽略该字符)

r+、w+和a+都可以实现对文件的读写,他们有什么区别呢?

  • r+会覆盖当前文件指针所在位置的字符,如原文件内容是“Hello,World”,打开文件后写入“hi” 则文件内容会变成“hillo, World”
  • w+与r+的不同是,w+在打开文件时就会先将文件内容清空。
  • a+与r+的不同是,a+只能写到文件末尾(无论当前文件指针在哪里)
三、Python文件操作步骤
  • 简单实现
f = open('song.txt', 'r', encoding='utf-8')  # 打开文件
print(f.read())  # 读取文件
f.close()  # 关闭文件
  • 中级实现
f = ''
try:
	f = open('song.txt', 'r', encoding='utf-8')
	print(f.read())
	num = 10 / 0
finally:
	print('>>>>>finally')
	if f:
	f.close()
  • 最佳实现
with open('song.txt', 'r', encoding='utf-8') as f:
	print(f.read())
print(f.close())

为了避免忘记或者为了避免每次都要手动关闭文件,我们可以使用with语句(一种语法糖,语法糖语句通常是为了简化某些操作而设计的),with语句会在其代码块执行完毕之后自动关闭文件。

四、Python文件读取相关方法
方法描述
read()一次读取文件所有内容,返回一个str
read(size)每次最多读取指定长度的内容,返回一个str,在Python2中size指定的是字节长度,在Python3中size指定的是字符长度
readlines()一次读取文件所有内容,按行返回一个list
readline()每次读取一行内容

此外,还要两个与文件指针位置相关的方法

方法描述
seek(n)将文件指针移动到指定字节的位置
tell()获取当前文件指针所在字节位置
1.读取指定长度的内容
with open('song.txt', 'r', encoding='utf-8') as f:
	print(f.read(12))

python3中的read(size)方法的size参数指定的要读取的字符数,这与文件的字符编码无关,就是返回12个字符。

2.读取文件中的一行内容
with open('song.txt', 'r') as f:
	print(f.readline().decode('utf-8'))
3.遍历打印一个文件中的每一行
  • 先一次性读取所有行到内存,然后再遍历打印
with open('song.txt', 'r', encoding='utf-8') as f:
	for line in f.readlines():
		print(line)

这种方式的缺点与read()方法是一样的,都是会消耗大量的内存空间。

  • 通过迭代器一行一行的读取并打印
witho open('song.txt', 'r', encoding='utf-8', newline='') as f:
	for line in f:
		print(line)

file类的其它方法:

方法描述
flush()刷新缓冲区数据,将缓冲区的数据立即写入文件
next()返回文件下一行,这个文件也是file对象实例可以被当成迭代器使用的原因
truncate([size])截取文件中指定字节数的内容,并覆盖保存到文件中,如果不指定size参数则文件会被清空
write(str)将字符串写入文件,没有返回值
writelines(sequence)向文件写入一个字符串或一个字符串列表,如果字符串列表中的元素需要换行要自己加入换行符
fileno()返回一个整型的文件描述符,可以用于一些底层IO操作上(如,os的模块的read()方法)
isatty()判断文件是否被连接到一个虚拟终端,是则返回True,否则返回False
五、python操作文件夹方法

python使用os及shutill模块,其中包含了很多操作文件和目录的函数。
os可以执行简单的文件夹及文件操作,引入用import os, 可用help(os) 或是 dir(os) 查看其用法。注意有些函数在os模块中,有的是在os.path模块中。
shutil 模块提供了大量的文件的高级操作, 特别针对文件拷贝和删除。主要功能为目录和文件操作以及压缩操作。需引入import shutil 。

  • os模块记录
  • shutil模块记录
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值