Python 文件处理
Python 文件处理是指对文件进行读取、写入、编辑等操作。
1 文件打开/创建
通过 Python 内置的 open() 函数打开一个文件,然后使用一些相关的方法进行读写操作。open() 函数的一般使用方法为:
file = open(file_name [, access_mode][, buffering])
其中,file_name 是文件名,access_mode 是打开文件的模式,buffering 是缓冲区大小,是可选参数
在 Python 中,access_mode 是指打开文件时的模式,用于指定文件的操作方式。Python open() 函数可以接受以下许多不同的 access_mode:
'r': 只读模式,打开文件后只能从其中读取数据,不能写入或修改文件。'w': 写入模式,打开文件后可以写入数据,每次打开一个文件时,文件的内容都会被清空。'a': 在末尾追加模式,打开文件后可以写入数据,但该数据会被追加到文件的末尾,不会清空文件原有内容。'x': 排他模式,用于创建并写入一个新文件,如果文件已经存在则会报错。'b': 二进制模式,以二进制格式进行文件的读写,用于读写非文本文件,例如图像或音频文件。't': 文本模式,可以读写文本文件,例如 .txt 文件。'+': 读写模式,可以同时读取和写入文件。
以上模式可以组合使用,例如 'rb+' 表示以二进制格式打开一个文件,同时既可以读取又可以写入。一般情况下,只需要使用其中的一个模式来操作文件即可。
2 文件关闭
在 Python 中,当我们完成文件操作时,需要及时关闭文件,以释放内存和确保数据被正确地保存到文件中。
- 一种常见的关闭文件的方法是使用
close()方法来手动关闭文件。例如:
file = open('example.txt', 'w')
file.write('Hello, World!')
file.close()
在这个例子中,我们通过 open() 函数打开了一个文件,并调用了 write() 方法向其中写入了一条消息。最后,我们使用 close() 方法关闭文件,释放句柄并将修改保存到磁盘中。
- 另一种关闭文件的方法是使用 Python 的上下文管理器(
with语句),当上下文管理器块结束时,Python 会自动关闭文件。例如:
with open('example.txt', 'w') as file:
file.write('Hello, World!')
在这个例子中,我们使用 with 语句打开文件并向其中写入了一条消息。当 with 块退出时,Python 会自动关闭文件并释放内存,我们不需要手动调用 close() 方法。这种方法更加安全,也更加简洁。
3 文件读取
read([size]): 一次读取指定字节数的内容(默认为文件的全部内容),返回一个字符串。readline(): 读取文件中的下一行内容,返回一个字符串。readlines(): 读取文件的所有行,返回一个 list,其中每个元素为文件的一行内容。
# 读取整个文件
with open("filename","r") as file:
contents = file.read()
print(contents)
# 按行读取文件
with open("filename","r") as file:
line = file.readline()
while line:
print(line)
line = file.readline()
# 一次性读取整个文件
with open("filename","r") as file:
lines = file.readlines()
for line in lines:
print(line)
需要注意的是,使用 with 语句可以自动关闭文件,不需要手动调用 close() 方法关闭文件对象。
4 文件写入
在Python中,我们可以使用open()函数创建、打开、读取和写入文件。在写入文件时,我们可以使用以下方法:
write()方法
write()方法可以用来向文件中写入指定的字符串,例如:
with open('myfile.txt', 'w') as myfile:
myfile.write('Hello, World!')
上述代码将会在当前目录下创建一个名为myfile.txt的文件,并且向其中写入Hello, World!这个字符串。
需要注意的是,write()方法会覆盖原有的文件内容。如果需要在文件中追加内容,应该使用append()方法。
writelines()方法
writelines()方法可以用来向文件中写入多行字符串,例如:
lines = ['First line\n', 'Second line\n', 'Third line\n']
with open('myfile.txt', 'w') as myfile:
myfile.writelines(lines)
在上述代码中,writelines()方法将会按照列表中的顺序,将其中的每一行字符串写入文件中。需要注意的是,在使用writelines()方法时,必须确保每一行字符串都以换行符\n结尾。
- 格式化字符串输出
在 Python 中,我们也可以使用格式化字符串输出的方式来向文件中写入内容,例如:
name = 'Alice'
age = 25
with open('myfile.txt', 'w') as myfile:
myfile.write(f'My name is {name}. I am {age} years old.')
在上述代码中,我们使用了格式化字符串输出的语法,通过大括号{}来插入变量的值,然后使用write()方法将这个字符串写入文件中。
需要注意的是,如果我们要写入多个变量,可以使用逗号,来分隔它们,例如:myfile.write(f'Name: {name}, Age: {age}')。
另外,在使用格式化字符串输出时,也需要注意输出内容的数据类型和格式。例如,我们可以使用{:.2f}来限定浮点数的小数位数为2,就像这样:myfile.write(f'Value: {value:.2f}')。
5 文件删除
当需要在 Python 中删除文件或文件夹时,我们可以使用 os 和 shutil 两个模块提供的方法。具体的方法如下:
- 使用
os.remove()删除单个文件
我们可以使用 os.remove(file_path) 方法删除指定路径下的单个文件。需要注意的是,该操作不可逆,一旦执行将无法恢复。
举个例子,如果要删除当前目录下的 test.txt 文件,则可以用以下代码实现:
import os
file_path = 'test.txt'
if os.path.exists(file_path):
os.remove(file_path)
print(f"{file_path} has been deleted successfully!")
else:
print(f"{file_path} does not exist!")
执行结果:
test.txt has been deleted successfully!
2. 使用 os.unlink() 删除单个文件
os.unlink() 方法与 os.remove() 方法功能相同,都可以删除指定路径下的单个文件,不同之处在于 os.unlink() 方法不支持使用完整路径,必须使用相对路径或者当前目录下的文件名。
举个例子,删除当前目录下的 test.txt 文件,可以使用以下代码:
import os
file_path = 'test.txt'
if os.path.isfile(file_path):
os.unlink(file_path)
print(f"{file_path} has been deleted successfully!")
else:
print(f"{file_path} does not exist!")
- 使用
os.rmdir()删除空文件夹
如果要删除空文件夹,则可以使用 os.rmdir() 方法删除指定的空文件夹。
举个例子,如果要删除当前目录下的一个名为 folder 的空文件夹,则可以使用以下代码实现:
import os
folder_path = 'folder'
if os.path.exists(folder_path) and os.path.isdir(folder_path) and not os.listdir(folder_path):
os.rmdir(folder_path)
print(f"{folder_path} has been deleted successfully!")
else:
print(f"{folder_path} does not exist or is not an empty directory!")
- 使用
shutil.rmtree()删除非空文件夹
如果要删除非空文件夹,则可以使用 shutil.rmtree() 方法删除整个文件夹及其所有内容。需要注意,该操作同样不可恢复,必须谨慎使用。
举个例子,如果要删除当前目录下的一个名为 folder 的文件夹及其所有内容,则可以使用以下代码实现:
import shutil
folder_path = 'folder'
if os.path.exists(folder_path) and os.path.isdir(folder_path):
shutil.rmtree(folder_path)
print(f"{folder_path} has been deleted successfully!")
else:
print(f"{folder_path} does not exist or is not a directory!")
注意,文件删除的操作不可逆,需要谨慎慎行。