Python操作文件

在Python 中,对文件的操作有很多种,常见的操作包括创建、删除、修改权限、读取、写入等。

一、open()函数

在 Python 中,如果想要操作文件,首先需要创建或者打开指定的文件,并创建一个文件对象,而这些工作可以通过内置的 open() 函数实现。

open() 函数:用于打开一个文件,并返回文件对象。如果该文件无法被打开,会抛出 OSError。

该函数常用形式是接收两个参数:文件名(file)和模式(mode)。

open(file, mode=‘r’)

该函数的完整语法格式如下:

fileObj = open(file, mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

  • file: 必需,文件路径(相对或者绝对路径)。
  • mode: 可选,文件打开模式
  • buffering: 设置缓冲
  • encoding: 一般使用utf8
  • errors: 报错级别
  • newline: 区分换行符
  • closefd: 传入的file参数类型
  • opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。

mode 参数:文件打开模式值如下(文件打开模式,直接决定了后续可以对文件做哪些操作):

Python操作文件_第1张图片

文件的操作一般分为以下 3 步:

  • 打开文件:使用 open() 函数,该函数会返回一个文件对象;
  • 对已打开文件做读/写操作。
  • 关闭文件:完成对文件的读/写操作之后,最后需要关闭文件,可以使用 close() 函数。

注意:使用 open() 方法打开的文件,使用完之后一定要关闭文件。

示例代码如下:

try:
    file = open("a.txt", encoding="utf-8")
    print(file)
except:
    raise
finally:
    file.close()

1、默认方式打开文件

当以默认模式打开文件时,默认使用 r 权限,由于该权限要求打开的文件必须存在,否则会报错:FileNotFoundError。

示例代码如下:

# 当前程序文件同目录下没有 a.txt 文件
file = open("a.txt")

print(file)

Python操作文件_第2张图片

在程序文件同目录下,手动创建一个 a.txt 文件,并再次运行该程序,就ok了。

2、指定编码

使用 open() 打开文件时,不同平台的 ecoding 默认参数值也不同。可以手动指定打开文件的编码格式。

file = open("a.txt", encoding="utf-8")

print(file) # <_io.TextIOWrapper name='a.txt' mode='r' encoding='utf-8'>

注意:手动修改 encoding 参数的值,仅限于文件以文本的形式打开。如果是以二进制格式打开时,不能对 encoding 参数的值做任何修改,否则程序会抛出 ValueError 异常。

Python操作文件_第3张图片

3、open()文件对象常用的属性

成功打开文件之后,可以调用文件对象本身拥有的属性获取当前文件的部分信息。

其常见的属性为:

  • file.name:返回文件的名称;
  • file.mode:返回打开文件时,采用的文件打开模式;
  • file.encoding:返回打开文件时使用的编码格式;
  • file.closed:判断文件是否己经关闭。

示例代码如下:

# 以默认方式打开文件
f = open('a.txt')

# 输出文件是否已经关闭
print(f.closed)  # False

# 输出访问模式
print(f.mode)  # r

#输出编码格式
print(f.encoding) # win下:cp936 相当于GBK

# 输出文件名
print(f.name) # a.txt

二、file 对象

file 对象使用 open 函数来创建,常用的函数如下:

1、关闭已打开文件

close() 函数:专门用来关闭已打开文件的对象。

该语法的基本格式如下:

file.close()

file = open("a.txt", encoding="utf-8")

print(file)

file.close()

2、读取文件中的数据

读取文件数据操作时,需要保证使用 open() 函数是可读模式打开文件(包括 r、rb、r+、rb+ 4 种),否则会抛出 io.UnsupportedOperation 错误。

Python 提供了如下 3 种函数,它们都可以帮我们实现读取文件中数据的操作:

  • read() 函数:逐个字节或者字符读取文件中的内容;
  • readline() 函数:逐行读取文件中的内容,包含最后的换行符“\n”。
  • readlines() 函数:一次性读取文件中所有行内容,包含同行尾的换行符“\n”。

(1)read() 函数示例

# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", encoding="utf-8")

# 输出读取到的数据
print(f.read())

# print(f.read(2)) # size参数:用于指定一次最多可读取的字符(字节)个数。默认不写表示读取一次性读取所有内容。

# 关闭文件
f.close()

在这里插入图片描述

(2)readline() 函数示例

# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", encoding="utf-8")

# 读取一行数据
con = f.readline() # abc
print(con)

# 关闭文件
f.close()

(3)readlines() 函数示例

# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", encoding="utf-8")

# 读取一行数据
con = f.readlines()
print(con)  # ['abc\n', '    q\n', '1231']

# 关闭文件
f.close()

3、向文件中写入数据

向文件中写入数据操作时,需要保证使用 open() 函数是以可写模式打开文件(包括 r+、w、w+、a 或 a+ 的模式),否则会抛出 io.UnsupportedOperation 错误。

Python 提供了下面 2 种函数:

  • write() 函数:可以向文件中写入指定内容。
  • writelines() 函数:可以实现将字符串列表写入文件中。

(1)write() 函数示例

# 以 utf-8 的编码格式打开指定文件
f = open("a.txt", 'w', encoding="utf-8")

# w:清空原内容,写入一行数据
f.write("写入一行数据wwww")
f.flush()

# 关闭文件
f.close()

flush() 函数:它可以实现将缓冲区的数据写入文件中。

(2)writelines() 函数示例

f = open("a.txt", 'w', encoding="utf-8")

list = ['abc\n', '    q\n', '1231']
list.append("\t写入字符串列表数据") # ['abc\n', '    q\n', '1231', '\t写入字符串列表数据']
print(list)

# 写入字符串列表数据
f.writelines(list)
f.flush()

# 关闭文件
f.close()

4、文件指针

文件指针用于标明文件读写的起始位置。

使用 open() 函数打开文件并读取文件中的内容时,总是会从文件的第一个字符(字节)开始读起。

注意:当向文件中写入数据时,如果不是文件的尾部,写入位置的原有数据不会自行向后移动,新写入的数据会将文件中处于该位置的数据直接覆盖掉。

Python file对象提供了 tell() 函数和 seek() 函数。

  • tell() 函数:用于判断文件指针当前所处的位置。
  • seek() 函数:用于移动文件指针到文件的指定位置。

(1)tell() 函数示例

f = open("a.txt", 'r', encoding="utf-8")

print(f.tell()) # 0
print(f.read(2)) # ab
print(f.tell()) # 2

(2)seek() 函数示例

该函数的语法格式如下:

file.seek(offset[, whence])

  • whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
  • offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。
f = open("a.txt", 'r', encoding="utf-8")

# 将文件指针从文件开头,向后移动到 5 个字符的位置
f.seek(2)
print(f.tell()) # 2
print(f.read(2)) # c

f.close()

三、with as语句

1、with as语句
在 Python 中,使用 with as 语句操作上下文管理器(context manager),它能够帮助我们自动分配并且释放资源。

with 语句用于异常处理时,可以理解为封装了 try…except…finally 编码范式,简化了文件流等公共资源的管理。使得代码更清晰、更具可读性。

该语句的基本语法格式为:

with 表达式 [as target]:
    代码块
  • 表达式:需要操作的对象。比如:open() 方法打开的文件
  • target 参数用于指定一个变量,该语句会将 expression 指定的结果保存到该变量中。
  • with as 语句中的代码块如果不想执行任何语句,可以直接使用 pass 语句代替。

示例代码如下:

with open('a.txt', 'a', encoding="utf-8") as f:
    f.write(" with as语句操作")

– 求知若饥,虚心若愚。

你可能感兴趣的:(Python,Python操作文件)