计算机中的文件
文件是存储在计算机上的数据集合,它可以是文本、图片、音频、视频或其他任何类型的数据。
- 在计算机系统中,文件通常用来长期保存信息。
- 文本文件:一种以字符编码(如ASCII、UTF-8、UTF-16等)的形式存储数据的文件。这些文件通常包含人类可读的字符,如字母、数字、标点符号和其他符号。
- 二进制文件:一种以二进制编码形式存储数据的文件,它包含的数据不是以字符形式直接表示的,而是以0和1的二进制形式表示。
文件处理步骤
- 打开文件
- 读取、写入
- 关闭文件
python
# 打开文件
f = open(file="./example1.txt")
# 读取文件
data = f.read()
# 关闭文件
f.close()
print(data)
python
# 打开文件
f1 = open(file="./example2.txt",mode="w")
# 写入文件,返回值是写入的字符长度。
f1.write(data)
# 关闭文件
f1.close()
python
# 防止打开文件过程中出错,加上 try ... except
try:
f1 = open(file="./b.txt",mode="w")
# 写入文件
f1.write(data)
finally:
# 不管是否报错,都关闭文件。
f1.close()
获取文件对象
在Python中,open() 函数用于打开一个文件,并返回一个文件对象,该对象可用于读取或写入文件内容。
- open(file,mode,encoding)
- file: 这是第一个参数,表示要打开的文件的路径。它是必须得,它可以是一个相对路径或绝对路径。
- 相对路径:以当前文件目录为参照。
- 当前目录:
example.txt
表示当前目录下有一个example.txt文件。 - 下级目录:
subfolder/data.csv
:这表示在当前目录中,有一个名为 subfolder 的子目录,而 data.csv 文件位于该子目录中。 - 上级目录:
../images/photo.jpg
:表示在当父目录中,有一个名为 images 的目录,而 photo.jpg 文件位于该目录中。
- 当前目录:
- 绝对路径:以盘符开头的路径。
- 相对路径:以当前文件目录为参照。
- mode: 这是第二个参数,指定文件打开的模式。它是可选的,如果省略,默认模式是 'r'(读取模式)。常见的模式:
- 'r': 只读模式(默认)。如果文件不存在,会抛出 FileNotFoundError。
- 'w': 写入模式。如果文件已存在,则将其覆盖;如果文件不存在,将创建一个新文件。
- 'x': 独占创建模式。如果文件已存在,则抛出 FileExistsError;否则,创建一个新文件。
- 'a': 追加模式。如果文件已存在,写入的数据会被添加到文件的末尾;如果文件不存在,将创建一个新文件。
- 'b': 二进制模式。与上述模式结合使用,如 'rb', 'wb', 'ab' 等。
- 't': 文本模式(默认)。与上述模式结合使用,如 'rt', 'wt', 'at' 等。
- encoding: 这是第三个参数,指定文件的编码格式。它也是可选的,默认编码通常是平台相关的。当打开一个文本文件时,这个参数非常有用,特别是在处理非ASCII字符时。常见的编码格式:
- 'utf-8': 适用于多种语言的国际编码。
- 'utf-16': 一种支持更多字符集的编码,通常用于处理特殊字符。
- 'ascii': 仅支持ASCII字符集的编码。
- 'latin-1', 'iso-8859-1': 西欧语言常用的编码。
- file: 这是第一个参数,表示要打开的文件的路径。它是必须得,它可以是一个相对路径或绝对路径。
以下是一个使用 open() 函数的示例,打开一个名为 example.txt 的文件,以文本模式读取,并指定使用 utf-8 编码:
python
with open('example.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
在这个示例中,如果 example.txt 文件存在,它将以只读模式打开,并且假设文件内容是以 utf-8 编码的。使用 with 语句确保文件在操作完成后会被正确关闭。
编码(Encoding)
编码是将字符串(str类型)转换成字节序列(bytes类型)的过程。这通常在需要将字符串写入文件或通过网络发送时进行。
- 语法:str.encode(encoding='utf-8', errors='strict')
- 参数 :
- encoding: 指定要使用的编码(如 'utf-8', 'ascii', 'latin-1' 等)。
- errors: 指定处理编码错误的策略(如 'strict', 'ignore', 'replace' 等)。
python
text = "Hello, World!"
encoded_text = text.encode(encoding='utf-8')
print(encoded_text) # 输出:b'Hello, World!'
解码(Decoding)
解码是将字节序列(bytes类型)转换回字符串(str类型)的过程。这通常在从文件读取或从网络接收数据后进行。
- 语法:bytes.decode(encoding='utf-8', errors='strict')
- 参数 :
- encoding: 指定字节序列使用的编码。
- errors: 指定处理解码错误的策略。
python
encoded_text = b'Hello, World!'
decoded_text = encoded_text.decode(encoding='utf-8')
print(decoded_text) # 输出:Hello, World!
编码解码注意事项
- 编码和解码必须匹配:编码时使用的编码格式和解码时使用的编码格式必须相同,否则可能会导致数据损坏或错误。
- 错误处理:在编码和解码过程中可能会遇到无法处理的字符或字节序列。通过设置 errors 参数,可以指定如何处理这些错误(例如,忽略它们或用特殊字符替换)。
- 默认编码:在Python 3中,默认的字符串编码是UTF-8,它支持多种语言的字符。
理解编码和解码是处理文本数据时非常重要的,尤其是在国际化和多语言环境中。正确地处理编码可以避免乱码问题,并确保数据的一致性和可靠性。
读取文件的方式
逐行读取
如果你想逐行处理文件,可以使用readline()或迭代文件对象。
使用readline()
python
with open('example.txt', 'r') as file:
line = file.readline()
while line:
print(line, end='') # 使用end=''避免重复打印换行符
line = file.readline()
迭代文件对象
python
with open('example.txt', 'r') as file:
for line in file:
print(line, end='')
读取所有行到列表
使用readlines()方法可以将文件的所有行读取到一个列表中。
python
with open('example.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line, end='')
使用with语句以外的读取方式
虽然不推荐,但你也可以不使用with语句来读取文件。在这种情况下,你需要确保在操作完成后手动关闭文件。
python
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close() # 手动关闭文件
读取特定数量的字符或字节
你可以使用read(size)方法来读取文件中的特定数量的字符或字节。
python
with open('example.txt', 'r') as file:
size_to_read = 10
content = file.read(size_to_read)
while content:
print(content, end='')
content = file.read(size_to_read)
写入文件的方式
使用 write() 方法
最简单的方式是使用 write() 方法将字符串写入文件。如果文件不存在,它将自动创建。
python
with open('example.txt', 'w') as file:
file.write('Hello, World!')
追加内容到文件
如果你想在文件末尾追加内容而不是覆盖它,可以使用 'a' 模式。
python
with open('example.txt', 'a') as file:
file.write('\nThis is a new line.')
写入多行
你可以通过在字符串中使用换行符 \n 来写入多行。
python
with open('example.txt', 'w') as file:
file.write('Line 1\nLine 2\nLine 3')
使用 writelines() 方法
如果你想写入一个字符串列表,可以使用 writelines() 方法。
python
lines = ['Line 1\n', 'Line 2\n', 'Line 3']
with open('example.txt', 'w') as file:
file.writelines(lines)
写入二进制数据
要写入二进制数据,你应该使用 'wb' 模式。
python
with open('example.bin', 'wb') as file:
file.write(b'\x00\x01\x02')
注意事项
- 使用 with 语句是一种安全的方式来处理文件,因为它会在代码块执行完毕后自动关闭文件。
- 确保你有写入文件的权限。
- 在写入之前,考虑是否需要备份原始文件。
- 如果写入的是文本文件,确保指定正确的编码格式以避免乱码。
以上就是Python中写入文件的一些常见方式。根据你的需求选择合适的方法。
附件
本文对应的jupyter notebook源码链接,欢迎下载练习:https://download.csdn.net/download/fx_yzjy101/89785190
如有问题请留言。