30天拿下Python之文件操作

简介: 30天拿下Python之文件操作

概述

在上一节,我们介绍了Python的推导式,包括:列表推导式、元组推导式、集合推导式、字典推导式、条件推导式等内容。在这一节中,我们将介绍Python的文件操作。Python是一种高级编程语言,它提供了许多内置函数和模块来处理文件操作,主要包括:打开文件、读取文件、写入文件、关闭文件、获取目录列表等。

打开文件

在Python中,可以使用open()函数来打开一个文件。该函数通常接受两个参数:文件路径和打开模式。

打开文件的常见模式有如下几种:

'r':只读模式。

'w':写入模式。如果文件存在,将其截断为空文件;如果文件不存在,则创建一个新文件。

'a':追加模式。如果文件存在,将新数据追加到文件的末尾;如果文件不存在,则创建一个新文件。

'x':创建模式。创建一个新文件,如果文件已存在,则失败。

't':文本模式,不指定模式时的默认值。

'b':二进制模式。使用带有'b'标记的打开模式(比如:'rb'、'wb'),可以以二进制模式读取和写入文件,这在处理图像、视频、音频和其他非文本文件时很有用。

# 打开名为text.txt的文件以进行读取
file = open('text.txt', 'r')


读取文件

打开文件后,可以使用read()函数来读取文件的内容。该函数接受一个可选参数,表示要读取的最大字符数。另外,还可以使用readline()函数一次读取一行,使用readlines()函数一次读取所有行并返回一个列表。

# 打开名为text.txt的文件以进行读取
file = open('text.txt', 'r')
# 读取整个文件内容  
content = file.read()
# 最多读取100个字符  
content = file.read(100)
# 读取一行内容
content = file.readline()
# 读取所有行内容,并返回一个列表
content = file.readlines()
# 使用完需要关闭文件
file.close()


写入文件

要向文件中写入内容,可以使用write()函数。该函数接受一个字符串参数,表示要写入的内容。也可以使用writelines()函数,该函数接受一个字符串序列,但不会自动添加换行符,需要手动添加。

# 打开名为text.txt的文件以进行读取
file = open('text.txt', 'w')
# 写入字符串内容
file.write('hello world\n')
# 写入列表,writelines不会自动添加换行符,需要手动添加
lines = ['first line', 'second line', 'third line']
file.writelines('\n'.join(lines))
file.close()


关闭文件

使用完文件后,应记得使用close()函数来关闭文件。这是一个良好的编程习惯,因为它可以释放占用的系统资源,并避免出现异常或错误。

实际上,上述几个示例代码都不够完善,因为open()函数在失败时,会抛出OSError异常。比较规范的写法可以参考下面的示例代码。

file = None
try:
    file = open('text.txt', 'r')
    print(file.readline())
except OSError as error:
    print(error)
finally:
    if file:
        file.close()


但如果每次读写文件时,都这样编码,太繁琐了。因此,Python提供了with语句。with语句用于处理文件对象,以确保文件在使用后被正确地关闭。这是一种处理文件的推荐方式,因为它可以自动管理文件的打开和关闭,从而避免资源泄漏。

当你使用with语句处理文件时,Python会在代码块结束时自动关闭文件,无论中间是否发生异常。这使得代码更加简洁和安全,因为你不必担心忘记关闭文件。

try:
    with open('text.txt', 'r') as file:
        content = file.read()
        print(content)
except:
    print('open exception')


在上面的示例代码中,我们使用open()函数打开了一个名为'text.txt'的文件,并将其赋值给变量file。然后,使用with语句将文件包裹起来。在with代码块中,我们读取了文件的内容并将其存储在变量content中,然后打印出来。当代码块结束时,Python会自动关闭文件,无论中间是否发生异常。

另外,还可以使用with语句来处理其他类型的资源,比如:网络连接、线程锁等。这种自动管理资源的方式可以确保资源在使用后被正确地释放,从而避免资源泄漏和程序崩溃等问题。

文件指针移动

要移动文件指针到指定位置,可以使用seek()函数。文件指针是一个内部变量,用于指示当前读写位置在文件中的位置。seek()函数接受两个参数:第一个参数用于指定新的位置,以字节为单位;第二个参数可选,表示要从哪个位置开始偏移,0表示从文件开头开始算起(默认值),1表示从当前位置开始算起,2表示从文件末尾开始算起。移动后,下一次读写操作将从指定位置开始。

file = open('text.txt', 'r')
# 读取前6个字符
data = file.read(6)
# 移动文件指针到文件开头
file.seek(0)
# 再次读取前6个字符
data = file.read(6)
file.close()


除了seek()函数,还可以使用tell()函数来获取当前文件指针的位置。tell()函数返回一个整数,表示当前文件指针的位置。

file = open('text.txt', 'r')
data = file.read(6)
position = file.tell()
print(position)
file.close()


获取目录列表

在Python中,可以使用os模块的listdir()函数来获取目录列表,该函数将返回给定目录中的所有文件和目录的名称列表。

import os
cur_dir = os.getcwd()
files = os.listdir(cur_dir)
for file in files:
    print(file)


在Python 3.4及更高版本中,还可以使用os模块的scandir()函数扫描目录的内容。scandir()函数会返回一个生成器,每次迭代产生一个ScandirItem对象,该对象代表目录中的一个条目,包括:文件、目录、链接等。

import os
cur_dir = os.getcwd()
for item in os.scandir(cur_dir):  
    print(item.path, item.is_file())


我们还可以使用pathlib模块的Path()函数返回一个PosixPath或WindowsPath对象,该对象有一个iterdir()函数,用于创建一个包含该目录下所有文件和目录的迭代器。由iterdir()函数生成的每个条目都包含文件或目录的信息,比如:名称、文件属性等。

import os
from pathlib import Path
cur_dir = os.getcwd()
entries = Path(cur_dir)
for entry in entries.iterdir():
    print(entry.name, entry.is_dir())


除了iterdir()函数,Path对象还包括不少实用的函数,可参看下面的介绍。

Path.mkdir(mode=0o777, parents=False, exist_ok=False):创建目录。如果目录已经存在,exist_ok=True参数将避免引发异常。注意:需要确保当前用户具有足够的权限来创建目录,如果目录权限不允许创建或发生其他错误,可能会引发异常。

Path.unlink(missing_ok=False):删除文件。注意:需要确保当前用户具有足够的权限来删除文件,如果文件权限不允许删除或发生其他错误,可能会引发异常。

Path.chmod(mode):改变文件权限。注意:需要确保当前用户具有足够的权限来改变文件权限,如果权限不足或发生其他错误,可能会引发异常。

Path.chown(uid, gid, recursive=False):改变文件所有者,uid和gid参数指定新的所有者和组。注意:需要确保当前用户具有足够的权限来改变文件所有者。在某些操作系统上,该功能可能不可用或有限制。如果权限不足或发生其他错误,可能会引发异常。

Path.touch(mode=0o777, exist_ok=True):创建新文件,如果文件已存在,则不改变内容。该函数需要写入权限才能创建文件,如果当前用户没有足够的权限,可能会引发权限错误。

Path.rmdir(missing_ok=False):删除目录。注意:该函数只能删除空目录,如果目录中包含文件或其他目录,将无法进行删除。另外,使用该函数时,需要确保当前用户具有足够的权限来删除目录;如果目录权限不允许删除或发生其他错误,可能会引发异常。

Path.rename(new_path):重命名文件或目录。如果文件或目录已经存在,它将被覆盖。注意:在使用该函数时,需要确保当前用户具有足够的权限来重命名文件或目录;如果权限不足或发生其他错误,可能会引发异常。

Path.exists(path, exist_ok=False):检查路径是否存在。

Path.is_dir(path):检查路径是否为目录。

Path.is_file(path):检查路径是否为文件。

Path.glob(pattern):对给定的模式进行glob遍历。注意:需要确保当前用户具有足够的权限来访问目录中的文件,如果发生权限不足或其他错误,可能会引发异常。

Path.resolve(strict=False):获取文件或目录的绝对路径。


相关文章
|
2月前
|
存储 Python
Python文件操作(1)
【10月更文挑战第17天】
Python文件操作(1)
|
5月前
|
监控 Java 数据处理
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【7月更文挑战第31天】在 Python 系统编程中, 文件操作与 I/O 管理至关重要。
62 2
|
2月前
|
数据采集 存储 Python
Python文件操作2
【10月更文挑战第18天】
Python文件操作2
|
6月前
|
开发者 Python
Python基础第七篇(Python的文件操作)
Python基础第七篇(Python的文件操作)
|
6月前
|
存储 安全 开发者
文件操作?Python让你轻松搞定!
【6月更文挑战第12天】Python编程中的文件操作至关重要,涉及数据存储和系统交互。通过内置的`open()`函数,开发者可轻松处理文件。以只读模式`'r'`为例,使用`with`语句打开并读取文件内容;写入文件则用`'w'`或`'a'`模式。文件对象还支持高级功能,如文件指针移动,允许随机访问。掌握这些技能能提升开发效率。
39 0
|
3月前
|
存储 Python
Python文件操作
Python文件操作
|
3月前
|
监控 安全 Java
文件操作不再难!Python系统编程实战,带你轻松驾驭文件系统与I/O
【9月更文挑战第13天】在Python系统编程中,文件操作与I/O管理至关重要。本文通过五个实战案例分享最佳实践:高效遍历文件系统、优雅处理文件读写、利用缓冲机制优化性能、并行处理文件加速任务以及异常处理确保程序稳健。使用pathlib、上下文管理器及concurrent.futures等工具,助你轻松掌握Python文件系统与I/O操作,提升编程效率和项目质量。 示例代码展示了如何使用pathlib遍历目录、with语句安全读写文件、控制缓冲区大小、并行处理多个文件以及捕获异常保证程序稳定运行。通过这些技巧,你将能够在实际项目中更加高效地管理和操作文件。
49 6
|
4月前
|
IDE 测试技术 开发工具
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
本文介绍了Python中的文件操作方法,包括使用open()打开文件、close()关闭文件、read()读取内容、readline()读取单行、readlines()读取多行、write()写入内容以及writelines()写入多行的方法。同时,探讨了文件操作模式和编码问题,并扩展了上下文管理器with...as的使用,以及对图片和音频文件操作的思考和练习。
35 1
Python接口自动化测试框架(基础篇)-- 不只是txt的文件操作
|
2月前
|
Java 程序员 Python
【Python】文件操作
【Python】文件操作
23 0
|
4月前
|
安全 Python
python文件操作详解
整个文件操作过程中,我们应始终保持代码的健壮性和清晰性,确保在出现错误时资源能够被正确释放。
66 1