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

您所在的位置:网站首页 python异常捕获和处理csv文件 Python文件操作指南:编码、读取、写入和异常处理

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

2024-07-15 07:12| 来源: 网络整理| 查看: 265

文件的编码

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

代码语言:javascript复制file = open('file.txt', 'r', encoding='utf-8')

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

文件的读取

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

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

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

文件的写入

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

代码语言:javascript复制file = open('file.txt', 'w', encoding='utf-8') file.write('Hello, World!') file.close()文件的追加

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

代码语言:javascript复制file = open('file.txt', 'a', encoding='utf-8') file.write('\nThis is a new line.') file.close()文件操作的综合案例

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

代码语言:javascript复制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 文件包含一些学生的成绩,每行一个。我们通过循环按行读取文件内容,并计算总分、学生人数和最高分,最后计算平均分和最高分。

文件的关闭

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

代码语言:javascript复制file = open('file.txt', 'r') # 文件操作... file.close()

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

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

代码语言:javascript复制with open('file.txt', 'r') as file: # 文件操作...文件的存在性检查

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

代码语言:javascript复制import os filename = 'file.txt' if os.path.exists(filename): print('文件存在') else: print('文件不存在')异常处理

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

代码语言:javascript复制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 语句进行文件写入

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

代码语言:javascript复制with open('file.txt', 'w', encoding='utf-8') as file: file.write('Hello, World!')

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

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

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

代码语言:javascript复制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 模块,用于执行更高级别的文件和目录操作。该模块提供了许多方便的函数,例如复制文件、移动文件、递归地复制目录等。

代码语言:javascript复制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():将文件内容按行读取并返回一个包含所有行的列表。代码语言:javascript复制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' 即可。

代码语言:javascript复制with open('file.txt', 'a', encoding='utf-8') as file: file.write('追加的内容')

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

文件的属性和信息

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

代码语言:javascript复制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() 方法返回文件的创建时间。

文件扩展名的处理

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

代码语言:javascript复制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() 函数将文件名分割成文件名部分和扩展名部分,返回一个包含两个元素的元组。通过操作元组的元素,可以获取或修改文件的扩展名。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3