文件的读写操作是Python编程中常见的编程任务内容之一。本文将详细讲解文件的读写操作。
目录
一、读操作
1. 打开文件
在Python中,使用open()函数来打开文件。这个函数需要至少一个参数,即文件名(包括路径,如果文件不在当前工作目录下)。
file = open('filename.txt', 'r')
这里,'filename.txt'是你要打开的文件名,'r'表示以“只读”模式打开文件。'r'是默认的模式,可以不写,但是明确的写出来更清晰 。
第三个参数encoding,可以不写,默认的编码是操作系统默认的编码。windows默认gbk,linux默认utf-8,mac默认utf-8。若是出现乱码,可能就是编码的问题,可以加上encoding='utf-8'
2. 读取文件内容
2.1 读取整个文件
可以使用read()方法读取整个文件的内容。
content = file.read()
print(content)
read()`方法会返回文件中的所有内容,格式为字符串。如果文件非常大,这种方法可能会占用大量内存。
2.2 按行读取:只读取一行
line = file.readline()
print(line)
使用readline()方法可以一次读取文件的一行内容。可以在一个循环中多次调用readline()来逐行读取文件。
2.3 按行读取:读取所有行
可以使用readlines()方法一次性读取文件的所有行,类型是一个列表,其中每个元素是文件的一行。
lines = file.readlines()
for line in lines:
print(line)
3. 关闭文件
file.close()
完成文件操作后,需要使用close()方法关闭文件。这可以释放文件所占用的系统资源。
4. 使用with语句
为了更方便地管理文件资源,Python提供了with语句。使用with语句可以确保文件在使用完毕后被正确关闭,即使在读取文件时发生了异常。
with open('filename.txt', 'r') as file:
content = file.read()
print(content) # 这里不需要显式调用file.close(),因为with语句会在代码块执行完毕后自动关闭文件
使用with关键字,只需要打开和操作文件内容即可,无需再手动关闭文件。当然若是有特殊操作,也可以在加上手动关闭的操作。
5. 注意事项
- 确保有足够的权限来读取文件。
- 注意文件的存在性和路径是否正确。
- 在读取大文件时,要考虑内存占用,尽量使用按行读取或其他分块读取的方式。
- 在多线程或多进程环境中操作文件时,要注意文件锁和同步问题,以避免数据不一致或损坏。
- 建议使用with语句来打开文件,以确保文件在使用完毕后被正确关闭。
二、写操作
在Python中,写文件的操作也是非常重要的。下面我将详细解释如何写文件,并提供一些注意事项,以分点表示和归纳的形式进行说明: 写文件的操作
1. 打开文件
file = open('filename.txt', 'w') # 直接写入
file = open('filename.txt', 'a') # 追加写入
使用open()函数,并指定文件名和模式。对于写文件,常用的模式有'w'(写入模式,会覆盖原有内容)和'a'(追加模式,在文件末尾添加内容)。
2. 写入文件
2.1 写入单行
file.write('Hello, World!\n')
使用write()方法可以向文件中写入指定内容。该方法接受一个字符串作为参数,并将该字符串写入文件。
2.2 写入多行
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
file.writelines(lines)
使用writelines()方法可以将多行内容写入文件。
3. 关闭文件
file.close()
写入完成后,使用close()方法关闭文件。可以确保文件被正确地关闭并释放系统资源。
4. 使用with语句
为了简化文件管理,Python提供了with语句。它可以确保文件在使用完毕后被正确关闭,即使发生异常。
with open('filename.txt', 'w') as file:
file.write('Hello, World!')。
5. 注意事项:
- 在写入文件之前,确保文件存在(对于'a'模式)或有权限创建新文件(对于'w'模式)。
- 确保有权限来写入文件。否则,会引发PermissionError。
- 默认情况下,Python使用缓冲区来写入文件。这意味着数据可能会先在内存中累积,然后再一次性写入磁盘。但如果你需要立即将数据写入磁盘,可以使用flush()方法或设置buffering=0来禁用缓冲功能。
- 在写入文件时,确保指定了正确的编码(如'utf-8'),以避免编码问题。如果不指定编码,Python将使用系统默认编码。
- 在写文件时,可能会遇到各种异常,如文件不存在、权限问题等。可以使用try-except语句来捕获并处理这些异常。
try:
with open('example.txt', 'r') as file:
content = file.read()
print(content)
except FileNotFoundError:
print('文件不存在!')
except PermissionError:
print('无权限访问文件!')
except Exception as e:
print(f'发生未知错误:{e}')
- 如果需要写入二进制数据(如图片、音频等),请使用'wb'或'ab'模式,并确保你的数据是字节串(bytes)类型。
- 使用with语句来简化文件管理,并确保文件在使用完毕后被正确关闭。 虽然使用with语句可以确保文件被正确关闭,但在某些情况下,可能需要手动关闭文件。
三、文件读写的其它操作
1. 文件定位
在文件读写中,seek(offset,whence)方法可以移动文件指针到指定的位置。
- offset:表示偏移量。
- whence:只能传入0、1、2中的一个数字。 0表示从文件头开始 1表示从当前位置开始 2 表示从文件的末尾开始。
with open('example.txt', 'r') as file:
content = file.read(10) # 读取前10个字符
print(content)
file.seek(0) # 移动文件指针到文件开头
content = file.read(5) # 再次读取前5个字符
print(content)
tell() 方法用来显示当前指针的位置。
with open('example.txt', 'r') as file:
content = file.read(10) # 读取前10个字符
print(content )
print(file.tell()) # tell()方法显示当前文件指针所在的位置
2. 其它模式
只读模式 ('r'):
- 这是文件打开的默认模式。
- 如果文件不存在,会引发一个I/O错误。
- 可以使用read(), readline(), 和 readlines()等方法来读取文件内容。
写入模式 ('w'):
- 如果文件存在,打开文件并从开头开始编辑,即原有内容会被删除。
- 如果文件不存在,会创建一个新文件。
- 可以使用write(), writelines()等方法来写入内容。
- 注意:这个模式会覆盖文件的原始内容。
追加模式 ('a'):
- 如果文件存在,文件指针会被放在文件的结尾。
- 新的内容会被写入到已有内容之后。
- 如果文件不存在,会创建一个新文件进行写入。
- 注意:这个模式主要用于写入,而不是读取。
读写模式 ('r+'):
- 允许你读取和写入文件。
- 文件指针默认在文件的开头。
- 如果文件不存在,会引发一个I/O错误。
- 可以使用read(), readline(), readlines(), write(), writelines()等方法。
写入并读取模式 ('w+'):
- 类似于'w'模式,但允许你读取文件。
- 由于该模式会截断文件,所以读取操作可能会返回空的内容(取决于你何时调用读取方法)。
追加并读取模式 ('a+'):
- 允许你读取文件并在文件末尾追加内容。
- 如果文件不存在,会创建一个新文件。
- 可以使用read(), readline(), readlines(), write(), writelines()等方法。
二进制模式 ('b'):
- 这个模式用于处理二进制文件,如图片、音频等。
- 可以与上述模式结合使用,如'rb'(二进制只读模式)、'wb'(二进制写入模式)等。
文本模式:
- 没有指定'b'模式时,Python默认使用文本模式。 文本模式会处理文本文件中的换行符,确保跨平台的兼容性。
敲黑板:
- 如果只是想读取文件,使用'r'模式;
- 如果只是想写入文件并覆盖原有内容,使用'w'模式;
- 如果只是想在文件末尾追加内容,使用'a'模式。
- 如果想同时读取和写入,可以选择'r+'、'w+'或'a+'模式。
- 如果只是想处理二进制文件时,一定要使用'b'模式。
四、完整的读写代码
#读取文件示例
# 打开文件,使用 'r' 模式表示读取模式
with open('example.txt', 'r') as file:
# 读取文件内容
content = file.read()
# 输出文件内容
print(content)
#写入文件示例
# 打开文件,使用 'w' 模式表示写入模式(如果文件已存在,内容会被覆盖)
# 如果你想在文件末尾追加内容,可以使用 'a' 模式
with open('example.txt', 'w') as file:
# 写入内容
file.write('Hello, World!')
#读取和写入文件的组合示例
#这个示例先读取文件的内容,然后添加一些新的内容,并写回到文件中。
# 打开文件以读取内容
with open('example.txt', 'r') as file:
content = file.read()
# 在读取的内容后添加新的内容
new_content = content + '\n' + 'This is new content.'
# 打开文件以写入新的内容(注意:这会覆盖原始文件)
with open('example.txt', 'w') as file:
file.write(new_content)
# 打开文件以追加内容
with open('example.txt', 'a') as file:
file.write('\nThis is additional content appended to the end.')