Python文件操作指南:编码、读取、写入和异常处理

文章目录

  • 文件的编码
  • 文件的读取
            • 使用 `read` 方法读取整个文件内容:
            • 使用 `readlines` 方法按行读取文件内容并存储到列表中:
            • 使用迭代器遍历文件内容:
  • 文件的写入
  • 文件的追加
  • 文件操作的综合案例
  • 文件的关闭
  • 文件的存在性检查
  • 异常处理
  • 文件操作的更多方法
  • 使用 `with` 语句进行文件写入
  • 使用 `try-except` 处理文件读取异常
  • 使用 `os` 模块进行文件操作
  • 使用 `shutil` 模块进行文件操作
  • 文件读取的其他方法
  • 文件追加写入
  • 文件的属性和信息
  • 文件扩展名的处理
  • 总结

文件的编码

Python文件操作指南:编码、读取、写入和异常处理_第1张图片

文件编码指定了文件中字符的表示方式。在 Python 中,可以使用 open 函数的 encoding 参数来指定文件的编码。

file = open('file.txt', 'r', encoding='utf-8')

常见的文件编码包括 ASCII、UTF-8、GBK 等。确保正确选择文件编码,以便正确读取和写入文件。

文件的读取

Python文件操作指南:编码、读取、写入和异常处理_第2张图片

Python 提供了多种方法来读取文件的内容。

使用 read 方法读取整个文件内容:
file = open('file.txt', 'r', encoding='utf-8')
content = file.read()  # 将整个文件内容作为一个字符串返回
print(content)
file.close()
使用 readlines 方法按行读取文件内容并存储到列表中:
file = open('file.txt', 'r', encoding='utf-8')
lines = file.readlines()  # 将文件内容按行读取到一个列表中
for line in lines:
    print(line)
file.close()
使用迭代器遍历文件内容:
file = open('file.txt', 'r', encoding='utf-8')
for line in file:
    print(line)
file.close()

通过迭代器(for-in 循环),我们可以直接遍历文件对象,以逐行处理文件内容。

文件的写入

Python文件操作指南:编码、读取、写入和异常处理_第3张图片

要将数据写入文件,可以使用 write 方法。打开文件时使用的模式应该为写入模式(w)。如果文件不存在,则会创建一个新文件;如果文件已存在,则会清空文件内容。

file = open('file.txt', 'w', encoding='utf-8')
file.write('Hello, World!')
file.close()

文件的追加

除了写入模式,还可以使用追加模式(a)向文件末尾添加内容。如果文件不存在,则会创建一个新文件。

file = open('file.txt', 'a', encoding='utf-8')
file.write('\nThis is a new line.')
file.close()

文件操作的综合案例

读取一个包含学生成绩的文件,并计算平均分和最高分。

file = open('grades.txt', 'r', encoding='utf-8')
total = 0
count = 0
highest = 0

# 遍历文件内容,逐行读取成绩
for line in file:
    # 去除每行首尾的空白字符并转换成整数
    grade = int(line.strip())
    total += grade
    count += 1
    if grade > highest:
        highest = grade

file.close()

# 计算平均分
average = total / count

print('Average:', average)
print('Highest grade:', highest)

案例中,假设 grades.txt 文件包含一些学生的成绩,每行一个。我们通过循环按行读取文件内容,并计算总分、学生人数和最高分,最后计算平均分和最高分。

文件的关闭

Python文件操作指南:编码、读取、写入和异常处理_第4张图片

打开文件后,应该在不再需要访问文件时将其关闭。这可以通过调用文件对象的 close 方法来实现。

file = open('file.txt', 'r')
# 文件操作...
file.close()

关闭文件是一个良好的编程习惯,可以释放系统资源并确保文件的正确关闭。

为了更方便地处理文件的打开和关闭,我们可以使用 with 语句来自动管理文件对象的生命周期。with 语句会在代码块结束时自动关闭文件,即使发生异常也可以正常关闭。

with open('file.txt', 'r') as file:
    # 文件操作...

文件的存在性检查

Python文件操作指南:编码、读取、写入和异常处理_第5张图片

在进行文件操作之前,有时候需要检查文件是否存在。可以使用 os.path 模块中的 exists 函数来判断文件是否存在。

import os

filename = 'file.txt'
if os.path.exists(filename):
    print('文件存在')
else:
    print('文件不存在')

异常处理

Python文件操作指南:编码、读取、写入和异常处理_第6张图片

在进行文件操作时,可能会遇到各种异常情况,比如文件不存在、权限错误等。为了增加程序的健壮性,我们可以使用异常处理机制来捕获和处理这些异常。

try:
    file = open('file.txt', 'r')
    # 文件操作...
except FileNotFoundError:
    print('文件不存在')
except PermissionError:
    print('权限错误')
finally:
    file.close()  # 确保文件被关闭

try 块中进行文件操作,如果出现指定的异常,就会转到对应的 except 块进行处理。无论是否发生异常,finally 块中的代码都会执行,用于确保文件的关闭。

文件操作的更多方法

除了基本的读写操作,Python 还提供了许多其他方法来处理文件,例如:

  • seek(offset[, whence]):移动文件指针到指定位置。
  • tell():返回当前文件指针的位置。
  • truncate(size):将文件截断为指定大小。

使用 with 语句进行文件写入

Python文件操作指南:编码、读取、写入和异常处理_第7张图片

在前面提到的文件写入示例中,我们没有使用 with 语句。但是,为了更好地管理文件的生命周期,推荐使用 with 语句来打开文件并进行写入操作。

with open('file.txt', 'w', encoding='utf-8') as file:
    file.write('Hello, World!')

使用 with 语句打开文件后,可以直接在代码块中进行文件写入操作,无需显式调用 close 方法。

使用 try-except 处理文件读取异常

在读取文件时,可能会遇到一些异常情况,例如文件不存在或者无法访问。为了处理这些异常,可以使用 try-except 块来捕获并处理异常。

try:
    with open('file.txt', 'r', encoding='utf-8') as file:
        content = file.read()
except FileNotFoundError:
    print('文件不存在')
except PermissionError:
    print('权限错误')
else:
    print(content)

例子中,如果文件不存在或者出现权限错误,就会在相应的 except 块中执行相应的代码。如果没有出现异常,就会执行 else 块中的代码,输出文件内容。

使用 os 模块进行文件操作

Python 的内置模块 os 提供了许多功能强大的函数,用于进行文件和目录操作。下面是一些常用的 os 模块函数:

  • os.rename(src, dst):重命名文件或目录。
  • os.remove(path):删除文件。
  • os.mkdir(path):创建目录。
  • os.rmdir(path):删除目录。

这些函数可以在文件系统上进行更底层的操作,所以在使用之前需要谨慎考虑。

使用 shutil 模块进行文件操作

除了 os 模块外,Python 还提供了 shutil 模块,用于执行更高级别的文件和目录操作。该模块提供了许多方便的函数,例如复制文件、移动文件、递归地复制目录等。

import shutil

# 复制文件
shutil.copy('source.txt', 'destination.txt')

# 移动文件
shutil.move('old_location.txt', 'new_location.txt')

# 递归复制整个目录
shutil.copytree('source_dir', 'destination_dir')

shutil 模块的函数提供了更灵活和易于使用的方法,可以方便地进行文件和目录操作。

文件读取的其他方法

除了使用 read() 方法一次性读取整个文件内容之外,还可以使用其他方法来读取文件内容:

  • readline():逐行读取文件内容(每次读取一行)。
  • readlines():将文件内容按行读取并返回一个包含所有行的列表。
with open('file.txt', 'r', encoding='utf-8') as file:
    line = file.readline()
    while line:
        print(line)
        line = file.readline()

with open('file.txt', 'r', encoding='utf-8') as file:
    lines = file.readlines()
    for line in lines:
        print(line)

这些方法对于大型文件或需要逐行处理文件内容的场景非常有用。

文件追加写入

除了覆盖写入文件之外,还可以使用追加写入模式将内容添加到文件的末尾。只需将打开文件的模式设置为 'a' 即可。

with open('file.txt', 'a', encoding='utf-8') as file:
    file.write('追加的内容')

使用追加模式打开文件后,新写入的内容会添加到文件的末尾而不会覆盖原有内容。

文件的属性和信息

使用 os 模块可以获取文件的各种属性和信息,例如文件大小、创建时间、访问时间等。

import os

filename = 'file.txt'
size = os.path.getsize(filename)
creation_time = os.path.getctime(filename)

print(f'文件大小: {size} 字节')
print(f'创建时间: {creation_time}')

getsize() 方法返回文件的大小(以字节为单位),getctime() 方法返回文件的创建时间。

文件扩展名的处理

Python文件操作指南:编码、读取、写入和异常处理_第8张图片

有时候需要获取文件的扩展名或修改文件的扩展名。可以使用 os.path 模块中的函数来实现。

import os

filename = 'file.txt'
extension = os.path.splitext(filename)[1]
new_filename = os.path.splitext(filename)[0] + '.new'  # 修改文件扩展名为 '.new'

print(f'文件扩展名: {extension}')
print(f'新文件名: {new_filename}')

splitext() 函数将文件名分割成文件名部分和扩展名部分,返回一个包含两个元素的元组。通过操作元组的元素,可以获取或修改文件的扩展名。

总结

python 知识点

你可能感兴趣的:(python案例分析归纳,python,python编码,python读取,python写入,python异常处理)