目录
一、文件基本概念
文件是计算机系统中存储信息的基本单位。它可以包含文本、图片、音频、视频等各种形式的数据。文件通常被存储在存储设备(如硬盘、闪存、光盘等)上,可以被计算机系统读取、写入和处理。
文件通常有一个唯一的文件名,用于标识不同的文件。文件名一般包含文件的扩展名,用于表示文件的类型或格式。例如:.txt表示文本文件,.jpg表示图片文件,.mp3表示音频文件等。
文件可以通过文件路径来定位和访问。文件路径通常包含文件的位置信息,可以是相对路径(相对于当前工作目录)或绝对路径(从根目录开始的完整路径)。通过文件路径,用户可以找到指定文件并操作它。
文件的内容可以被读取、写入和修改。读取文件可以获取文件中存储的数据,并将其加载到计算机内存中。写入文件可以将数据存储到文件中,并更新文件的内容。修改文件可以改变文件的内容、大小或属性。
文件可以分为不同的类型,常见的类型包括文本文件、二进制文件、可执行文件、压缩文件等。不同类型的文件有不同的结构和格式,需要使用不同的方法来处理和操作。
二、文件打开和关闭
2.1 打开文件 open() 方法
open()方法是Python内置的文件打开函数,用于打开一个文件并返回文件对象。
函数原型:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
- file:要打开的文件名或路径。
- mode:打开文件的模式。
- buffering:设置缓冲策略,默认值为-1,表示使用系统默认的缓冲策略。
- encoding:指定打开文件时的编码方式,常用的编码方式有'utf-8'、'gbk'等。
- errors:设置编码错误处理方式,默认值为None,表示忽略错误。
- newline:设置换行符的处理方式,默认值为None,表示使用系统默认的换行符。
- closefd:指定关闭文件描述符的方式,默认值为True,表示关闭文件描述符。
- opener:设置打开文件时使用的自定义开启器。
常见的文件打开模式:
模式 | 描述 |
---|---|
'r' | 以只读方式打开文件。文件指针位于文件的开头,如果文件不存在则抛出异常。 |
'w' | 以写入方式打开文件。如果文件存在则将其内容清空,如果文件不存在则创建一个新文件。 |
'a' | 以追加方式打开文件。文件指针位于文件的末尾,如果文件不存在则创建一个新文件。 |
'x' | 以独占方式创建一个新文件并打开文件。如果文件已经存在则抛出异常。 |
'b' | 以二进制模式打开文件。可以与其他模式一起使用,如 'rb'、'wb'、'ab'。 |
't' | 以文本模式打开文件。默认模式,可以与其他模式一起使用,如 'rt'、'wt'、'at'。 |
'+' | 以读写方式打开文件。可以与其他模式一起使用,如 'r+'、'w+'、'a+'。 |
2.2 File 对象的属性
在 Python 中,通过使用 open()
函数打开文件后,会返回一个文件对象。可以使用该对象的属性来获取有关文件的相关信息。以下是一些常见的文件对象属性:
name
:返回文件的名称或路径。mode
:返回文件的打开模式。closed
:表示文件是否已关闭,如果文件已关闭则为True
,否则为False
。encoding
:返回文件的编码方式。readable()
:返回文件是否可读。writable()
:返回文件是否可写。seekable()
:返回文件是否支持随机访问。
例如:
f = open('file.txt', 'r')
print(f.name) # 输出文件名 'file.txt'
print(f.mode) # 输出文件的打开模式 'r'
print(f.closed) # 输出文件是否已关闭 False
print(f.encoding) # 输出文件的编码方式
print(f.readable()) # 输出文件是否可读 True
print(f.writable()) # 输出文件是否可写 False
print(f.seekable()) # 输出文件是否支持随机访问 True
f.close() # 关闭文件
print(f.closed) # 输出文件是否已关闭 True
注意:
在使用这些属性之前,确保文件对象是有效的并且已打开。如果文件已关闭,则无法访问文件对象的属性。
2.3 关闭文件 close() 方法
在Python中,我们可以使用文件对象的 close()
方法来关闭已打开的文件。调用 close()
方法后,文件将不再可用,并且资源将被释放。
以下是使用 close()
方法关闭文件的示例:
f = open("file.txt", "r")
# 使用文件对象进行操作
f.close()
注意:
关闭文件是一个很好的习惯,可以确保文件资源被正确释放。在没有显示调用 close()
方法时,Python也会在程序结束时自动关闭文件。
此外,还有另一种更常用的方式来打开文件,并使用 with
语句来自动关闭文件。下面是使用 with
语句来关闭文件的示例:
with open("file.txt", "r") as f:
# 使用文件对象进行操作
# 在结束 with 代码块后,文件会自动关闭
在上面的示例中,我们使用 with
语句打开文件,并将返回的文件对象赋给变量 f
。然后我们使用文件对象进行文件操作。当 with
代码块结束时,文件对象会自动关闭,无需显式调用 close()
方法。
三、文件操作
3.1 写入操作方法
3.1.1 write()
方法
在Python中,我们可以使用文件对象的 write()
方法向文件中写入内容。write()
方法接受一个字符串作为参数,并将该字符串写入文件。
以下是使用 write()
方法写入文件的示例:
f = open("file.txt", "w")
f.write("Hello, World!")
f.close()
在上面的示例中,我们使用 open()
函数以写入模式打开文件,并将返回的文件对象赋给变量 f
。然后,我们使用 f.write("He llo, World!")
将字符串 "Hello, World!" 写入文件。最后,我们调用 f.close()
方法来关闭文件。
3.3.2 writelines()
方法
除了使用 write()
方法写入字符串,我们还可以使用 writelines()
方法将多个字符串写入文件。writelines()
方法接受一个字符串列表作为参数,将列表中的所有字符串写入文件。
以下是使用 writelines()
方法写入文件的示例:
f = open("file.txt", "w")
lines = ["Hello, ", "World!"]
f.writelines(lines)
f.close()
在上面的示例中,我们使用 writelines()
方法将字符串列表 lines
写入文件。
除了普通文本,我们还可以写入其他数据类型,如数字、列表或者字典。但是,在写入非字符串类型时,需要先将其转换为字符串格式。
以下是将数字写入文件的示例:
f = open("file.txt", "w")
f.write(str(10))
f.close()
在上面的示例中,我们在写入之前使用 str()
函数将数字 10 转换为字符串。然后,我们通过 write()
方法将字符串 "10" 写入文件。
3.2 读取操作方法
文件读取操作方法有以下几种常见的方式:
3.2.1 read() 方法
read()方法:一次性读取整个文件的内容。
with open('file.txt', 'r') as file:
content = file.read()
3.2.2 readline() 方法
readline()方法:逐行读取文件内容。每次调用readline()方法读取一行,并将光标移动到下一行。
with open('file.txt', 'r') as file:
line = file.readline()
while line:
print(line)
line = file.readline()
3.2.3 readlines() 方法
readlines()方法:读取多行内容并以列表形式返回,每一行作为列表的一个元素。
with open('file.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line)
3.3 定位与移动操作方法
在文件读取过程中,有时需要定位到文件的特定位置或移动文件指针到不同的位置。Python提供了一些方法来进行文件定位和移动操作。
以下是文件定位与移动操作方法:
3.3.1 tell() 方法
tell()方法:tell()方法返回文件指针的当前位置,即文件中当前读取/写入的位置。
with open('file.txt', 'r') as file:
position = file.tell()
print(position)
3.3.2 seek() 方法
seek()方法:seek()方法用于将文件指针移动到指定位置。它接受两个参数:偏移量和起始位置。
函数原型:
seek(offset, whence)
参数说明:
- offset:偏移量,表示需要移动的字节数。可以是正数、负数或零。正数表示向后移动,负数表示向前移动,零表示不移动。
- whence:起始位置,表示确定偏移量的参考位置。可以是0、1或2。
- 0:从文件开头开始计算偏移量。
- 1:从当前位置开始计算偏移量。
- 2:从文件末尾开始计算偏移量。
- seek()方法在文件开头位置移动文件指针:
with open('file.txt', 'r') as file:
file.seek(10) # 将文件指针移动到第10个字节处
content = file.read()
print(content)
- seek()方法在当前位置移动文件指针:
with open('file.txt', 'r') as file:
file.seek(5, 1) # 从当前位置向后移动5个字节
content = file.read()
print(content)
注意:
在使用seek()方法之前,要确保文件以读取模式打开。此外,使用tell()和seek()方法时,要确保文件指针不超出文件的大小范围,否则可能会引发异常。
3.4 复制、重命名与删除
在python中,可以使用shutil模块和os模块来进行文件复制、重命名和删除操作。
3.4.1 文件复制
使用shutil模块中的copy()
函数进行文件复制操作。示例如下:
import shutil
# 复制单个文件
shutil.copy('source_file.txt', 'destination_file.txt')
# 复制整个目录
shutil.copytree('source_directory', 'destination_directory')
3.4.2 文件重命名
使用os
模块中的rename()
函数进行文件重命名操作。示例如下:
import os
os.rename('old_file_name.txt', 'new_file_name.txt')
3.4.3 文件删除
使用os
模块中的remove()
函数进行文件删除操作。示例如下:
import os
os.remove('file_to_be_deleted.txt')
3.4.4 删除目录
需要使用shutil
模块中的rmtree()
函数。示例如下:
import shutil
shutil.rmtree('directory_to_be_deleted')
四、文件夹操作
在Python中,使用os
模块可以进行文件夹的操作。下面是一些常见的文件夹操作方法:
4.1 创建文件夹
os.mkdir(path)
,其中path
为要创建的文件夹路径。
import os
os.mkdir("folder_name")
4.2 删除文件夹
os.rmdir(path)
,其中path
为要删除的文件夹路径。
import os
os.rmdir("folder_name")
4.3 重命名文件夹
os.rename(src, dst)
,其中src
为原文件夹路径,dst
为目标文件夹路径。
import os
os.rename("old_folder_name", "new_folder_name")
4.4 检查文件夹是否存在
os.path.exists(path)
,其中path
为文件夹路径。返回值为布尔型,存在返回True
,不存在返回False
。
import os
if os.path.exists("folder_name"):
print("文件夹存在")
else:
print("文件夹不存在")
4.5 切换当前工作目录
os.chdir(path)
,其中path
为目标文件夹路径。
import os
os.chdir("folder_name")
4.6 获取当前工作目录
os.getcwd()
,返回当前工作目录的路径。
import os
current_dir = os.getcwd()
print(current_dir)