> 文章列表 > Python --- 文件操作

Python --- 文件操作

Python --- 文件操作

目录

前言

一、open()函数

1.只读模式 r

2.只写模式 w

3.追加模式 a

二、操作其他文件

1.Python 操作二进制

2.Python 操作 json 文件

三、关闭文件

四、上下文管理器

五、文件指针位置


前言

在实际操作中,通常需要将数据写入到本地文件或者从本地文件中读取数据等操作,那么作为 Python 爱好者的我们,必须掌握用 Python 语言去对本地文件进行操作。

本地文件操作步骤:

  1. 找到文件所在位置
  2. 打开文件
  3. 操作文件
  4. 关闭文件

一、open()函数

file:打开的文件位置(路径)
mode:指定操作文件的权限(默认只读权限)
encoding:指定编码utf-8,解决中文乱码的问题

1.只读模式 r

方法 描述
f.readable() 判断是否可读
f.read(n)

读取全部,在python中n为字符

n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。

f.readline() 逐行读取,包括\\n
f.readines 读取所有,返回值为列表,包括\\n

data.txt

hello
world
cheng xu yuan

(1)f.readable()

判断是否可读,返回布尔值

f = open('data.txt', mode='r', encoding='utf-8')
if f.readable():print('可读')
else:print('不可读')

运行结果:

(2)f.read(n)

这里n可以自己设置读取内容的多少,不设置或者设置为负值,则读取全部内容。

if f.readable():   f = open('data.txt', mode='r', encoding='utf-8')print(f.read(8))

 运行结果:

(3)f.readline()

从文件中读取一行内容,换行符是‘\\n’,重复输入此命令是从下一行开始读取。

if f.readable():f = open('data.txt', mode='r', encoding='utf-8')print(f.readline(), end='')print(f.readline(), end='')

运行结果:

仔细观察我们可以发现,打印一次f.readline(),它只输出一行,并且指针移到了下一行开头。最后一行输出的是空字符,说明指针到了文件结尾,并且不会自动回到开头。

每输出一行内容,它会自动输出一个\\n。我们可以再后面加上end=’’,意思就是它默认的结尾是‘\\n’,我们把它改成空字符。

(4)f.readlines()

将文件中每一行作为一个元素,保存在一个列表中,返回的值就是这个列表。它会将文件中的全部内容一次性读入列表,有一个好处就是取用内容十分方便。

if f.readable():f = open('data.txt', mode='r', encoding='utf-8')print(f.readlines())

运行结果:

注意:

  • r模式,当文件不存在时则报错
  • 读取不可逆

2.只写模式 w

方法 描述
f.writable() 判断是否可写
f.write(str) 写入内容,返回值为写入字符串的长度
f.writelines(seq) 写入多行,但需要自己添加换行符

(1)f.write(str)

用于将字符串或者byte类型的数据写入文件。该命令可以多次重复,但只是在计算机内存中操作,只有关闭了文件(with语句中不需要)才会保存到硬盘中。

with open('data.txt',mode='w',encoding='utf-8') as file:f = (file.write('很美'))print(type(f),f,sep='\\n')with open('data.txt',mode='r',encoding='utf-8') as file:print(file.read())

 运行结果:

注意:

  • w模式,当文件不存在时创建文件
  • 再次写入时为覆盖

3.追加模式 a

注意:

  • a模式,当文件不存在时创建文件
  • 再次写入为追加

二、操作其他文件

1.Python 操作二进制

在 Python 中,使用 wb 模式,写入二进制数据。

2.Python 操作 json 文件

方法 描述
json.loads() json 转为 字典(适用于语句)
json.dumps() 字典转为 json (适用于语句)
json.load() json 转为字典(适用于文件)
json.dump() 字典转为json(使用于文件)

三、关闭文件

需要注意的是,当文件打开之后,必须通过 f.close() 语句来关闭文件,释放资源。

四、上下文管理器

with 关键字用于 Python 的上下文管理器机制。为了防止诸如 open 这一类文件打开方法在 操作过程出现异常或错误,或者最后忘了执行 close 方法,文件非正常关闭等可能导致文件泄 露、破坏的问题 。Python 提供了 with 这个上下文管理器机制,保证文件会被正常关闭。在 它的管理下,不需要再写 close 语句。其余操作都同 open() 一致。

f = open('data.txt', 'w')
f.write("cheng xu")
f.close()  # 关闭文件

 使用上下文管理器:

with open('data.txt', 'w') as f:f.write("cheng xu")

五、文件指针位置

在文件读写的操作过程中,我们发现文件的指针是会根据我们的打开方式、以及读写命令的执行,有一个固定的位置,这样使用起来不能够随心所欲,那么我们就需要能够自己掌握指针的位置。

方法 描述
f.tell() 文件所处位置
f.seek(offset,whence)

1.tell()

返回文件读写指针当前所在的位置,这个位置是从文件开头算起的 字节数 ,而不是字符数。

with open('data.txt',mode='w',encoding='utf-8') as file:file.write('你好')print(file.tell())file.write('呀')print(file.tell())

运行结果:

从这里我们也可以发现:汉字占用三个字节。

2.f.seek(offset,whence)

用于指定指针的位置。它有两个参数,先介绍第二个参数whence,它有三个固定的选项,分别是0、1、2

whence
0 从文件首开始偏移
1 从当前所在位置开始偏移
2 从文件末尾开始偏移

第一个参数是偏移量,就是需要从所选位置移动偏移的字节数,很容易理解。请看示例:(在‘你好’中间插入字符‘们’)

with open('data.txt',mode='r+',encoding='utf-8') as file:file.write('你好')file.seek(0, 0)print(file.read())file.seek(3, 0)old=file.read()file.seek(3, 0)file.write('们')file.write(old)file.seek(0, 0)print(file.read())

运行结果: