python笔记12
1、文件的基本操作步骤
文件是计算机系统中用于存储数据的基本单位,它可以包含文本、图像、音频、视频等各种类型的信息。在Python中,进行文件操作通常涉及以下基本步骤:
1.打开文件(Open File):
在Python中,要打开一个文件,可以使用内置的open() 函数。 open()函数有多种参数,最常用的是文件名和模式。
基本的打开文件语法如下:
file = open(filename, mode)
其中:
filename是文件的路径和名称。mode是打开文件的模式,它指定了你想要对文件执行的操作。常见的模式包括:'r':只读模式。默认模式,如果文件不存在会引发错误。'w':写入模式。如果文件不存在,则会创建新文件;如果文件已存在,则会清空文件内容。'a':追加模式。如果文件不存在,则会创建新文件;如果文件已存在,则在文件末尾追加内容。'r+':打开文件进行读写操作,文件必须存在。从文件开头开始读写,不会清空文件内容。如果文件不存在,则会引发 错误。'w+':打开文件进行读写操作,如果文件不存在则创建新文件。会清空文件内容。如果文件已存在,则会从头开始写入,并覆盖原有内容。'a+':打开文件进行读写操作,如果文件不存在则创建新文件。从文件末尾开始追加内容,不会清空文件内容。文件指针位于文件末尾,即写入操作会在文件末尾添加内容。'b':二进制模式。用于处理二进制文件,例如图像或视频文件。'rb'(读取二进制)或'wb'(写入二进制)
2.读取文件内容(Read File):
在Python中,要读取文件的内容,可以使用打开文件后返回的文件对象上的不同方法来实现。以下是几种常用的方法:
1.使用 read()方法读取整个文件内容:
# 打开文件
file = open('example.txt', 'r')# 读取整个文件内容
content = file.read()# 打印文件内容
print(content)# 关闭文件
file.close()
2.使用 readline()方法逐行读取文件内容:
# 打开文件
file = open('example.txt', 'r')# 逐行读取文件内容
line = file.readline()
while line:print(line, end='') # 去除每行末尾的换行符line = file.readline()# 关闭文件
file.close()
3.使用readlines() 方法将文件内容读取为列表:
# 打开文件
file = open('example.txt', 'r')# 将文件内容读取为列表
lines = file.readlines()# 打印文件内容
for line in lines:print(line, end='') # 去除每行末尾的换行符# 关闭文件
file.close()
3.写入文件内容(Write to File):
在Python中,除了使用write() 方法逐个写入数据外,还可以使用writelines() 方法将一个字符串列表写入文件。下面是它们的简要说明和示例用法:
1.方法:write()
write() 方法用于向文件中写入一个字符串。如果文件已存在,写入的内容会覆盖原有内容;如果文件不存在,则会创建新文件。
# 以写入模式打开文件
file = open('example.txt', 'w')# 使用write()方法写入字符串
file.write('Hello, World!\n')
file.write('This is a new line.\n')# 关闭文件
file.close()
2.方法:writelines()
writelines() 方法用于向文件中写入一个字符串列表,即将列表中的每个字符串逐行写入文件。如果文件已存在,写入的内容会覆盖原有内容;如果文件不存在,则会创建新文件。
# 字符串列表
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']# 以写入模式打开文件
with open('example.txt', 'w') as file:# 使用writelines()方法写入字符串列表file.writelines(lines)
注意事项:
write()方法是将一个字符串写入文件。writelines()方法接受一个字符串列表,并将列表中的每个字符串写入文件,不会在字符串之间添加额外的换行符,需要手动添加。- 在使用
write()或writelines()方法写入文件时,需要确保数据的格式正确,特别是换行符等细节。 - 在写入完数据后,务必关闭文件以确保数据被正确保存。
- 使用写入模式
'w'时,如果文件不存在,将会创建新文件。如果文件已存在,写入操作会覆盖原有内容。 - 如果想在文件末尾追加内容而不是覆盖原有内容,可以使用追加模式
'a'或'a+'。
这些方法都可以用于向文件中写入内容,选择使用哪种方法取决于你的具体需求以及数据的格式。
4.file.seek()
file.seek(offset, whence) 方法用于在文件中移动文件指针的位置。文件指针指示下一次读取或写入操作将从文件的哪个位置开始。这个方法的参数包括:
offset: 移动的字节数,可以为正数或负数。正数表示向文件末尾方向移动,负数表示向文件开头方向移动。whence: 指定基准位置,可以是 0(从文件开头),1(从当前位置),或 2(从文件末尾)。
以下是file.seek() 方法的一些示例用法:
1. 从文件开头移动到指定位置:
with open('example.txt', 'r') as file:# 将文件指针移动到第10个字节的位置file.seek(10)content = file.read()print(content)
2.从当前位置向后移动:
with open('example.txt', 'r') as file:# 移动文件指针到当前位置的后5个字节file.seek(5, 1)content = file.read()print(content)
3.从文件末尾向前移动:
with open('example.txt', 'r') as file:# 移动文件指针到文件末尾前5个字节的位置file.seek(-5, 2)content = file.read()print(content)
4.在读写模式下使用 :seek()
在读写模式下,使用 seek()可以移动文件指针,并且在读取或写入之前需要确保文件指针的位置是正确的。
with open('example.txt', 'r+') as file:# 移动文件指针到文件末尾file.seek(0, 2)# 在文件末尾追加内容file.write('New content added at the end.')# 将文件指针移到文件开头以读取文件内容file.seek(0)content = file.read()print(content)
seek() 方法在文件操作中很有用,特别是在需要随机访问文件位置时。确保在使用它时小心处理文件指针的位置,以免引起意外的结果。
5.文件复制:
def copy_file(source_file, destination_file):try:# 打开源文件进行读取with open(source_file, 'rb') as source:# 读取源文件内容content = source.read()# 打开目标文件进行写入with open(destination_file, 'wb') as destination:# 将读取的内容写入目标文件destination.write(content)print(f'File "{source_file}" copied to "{destination_file}" successfully.')except FileNotFoundError:print(f'Error: File "{source_file}" not found.')except Exception as e:print(f'An error occurred: {e}')# 调用函数进行文件复制
copy_file('source.txt', 'destination.txt')
上述示例中,copy_file 函数接受两个参数:source_file 是源文件的路径,destination_file 是要复制到的目标文件的路径。
请注意以下几点:
- 使用
'rb'和'wb'作为文件打开模式,确保以二进制模式进行读取和写入,以防止在复制过程中对文件内容进行编码和解码。 - 在复制大文件时,可能需要分块读取和写入,以避免一次性加载整个文件内容到内存中。
如果你只想复制文件的内容而不是文件的属性(例如权限、创建日期等),上述方法足够简单有效。如果需要更复杂的复制操作,可能需要使用特定的库,如shutil 模块中的 copy2函数。
6.with语句:
with 语句是 Python 中用于管理资源的一种语法结构,它可以确保在使用资源后正确地释放它们。常见的用法是在文件 I/O、数据库连接、网络连接等需要手动关闭的资源中。
下面是with 语句的一般语法结构:
with expression as variable:# 语句块
在这个语法中expression, 是一个表达式,它返回一个实现了上下文管理器协议(Context Manager Protocol)的对象。variable 是一个可选的变量名,用来引用上下文管理器生成的对象。
当with 语句执行时,它会获取上下文管理器生成的对象,并且在进入 with代码块之前调用该对象的 __enter__方法,在退出with 代码块时调用__exit__ 方法。这样就确保了在进入和退出代码块时资源得到正确的管理和清理。
以下是一个使用 with语句处理文件 I/O 的示例:
with open('example.txt', 'r') as file:content = file.read()print(content)
在这个示例中,open('example.txt', 'r') 返回一个文件对象,它是一个实现了上下文管理器协议的对象。在 with语句中,file 文件对象被赋给变量 。当进入 with代码块时,文件对象的__enter__ 方法被调用,文件被打开并且可以进行读取操作。当退出with 代码块时,文件对象的__exit__方法被调用,文件被关闭,确保了文件资源的正确释放。
使用 with语句可以简化代码,并且确保在使用资源后正确地释放它们,因此是 Python 编程中的一种推荐的做法。