一、文件操作
1.1、计算机文件
在计算机系统中,以硬盘为载体存储在计算机上的信息集合成为文件。文件可以是文本文档、图片、声音、程序等多种类型。在编程时经常要对文件进行读写操作,从程序员的视角可以把文件理解为是连续的字节序列,进行数据传出需要使用字节流,字节流可以是由单个字节或大块数据组成。文件类型通常分为文本文件和二进制文件。
对文件进行操作在Python中分为3个步骤,首先要打开文件,然后是对文件进行读写操作,最后需要关闭文件。
1.2、文件读写模块
1.3、文件的创建
1.3.1、使用 open 函数
Python内置了一个名为open的函数,它可以用于创建、打开和修改文件。
file = open("file01.txt", "w")
file.close()使用“file01.txt”作为文件名,并使用“w”作为访问模式。其中,“w”代表写入模式,它会创建一个新文件,并允许写入内容。
1.3.2、使用 with 关键字
在使用open函数创建文件时,我们需要手动关闭文件,以确保资源得到释放。为了简化这个过程,Python提供了一个更好的方式,即使用with关键字,这样就不必执行关闭操作了。示例如下:
with open("file02.txt", "w") as file:
# 在这里进行文件操作
pass1.4、读文件
如果想要获取文件数据,可以使用带有读权限的方式打开文件。
在系统中打开file01文件,在此文件中添加数据:
nihao01
nihao02
nihao03
1.4.1、open()方式的使用
要想读取一个文件的内容,首先需要打开此文件,还是要用到open()函数,如以下语句:
file = open("file01.txt", "r") # r表示以读的方式进行文件读取操作,但文件要存在
file.close()备注:
如果文件不存在,无法以”r“的方式读取文件,可以用”w+“的方式读文件,表示读写方式打开
1.4.2、read()方式读取文件内容
read()方式用于读取整个文件的内容,并将其存储为一个字符串。例如,要读取取名为”file01.txt“的文件的所有内容,可以使用以下代码:
file = open("file01.txt", "r")
content = file.read()
print(content)
file.close()1.4.3、结合 with 语句读取文件内容
with open("file01.txt", "r") as file:
content = file.read()
print(content)1.4.4、readlines()方法
readlines()方法用于读取整个文件的内容,并将其存储为一个列表,列表中的每个元素表示文件中的一行。例如,要读取名为“file01.txt”的文件的所有内容,可以使用以下代码:
提前手动在要读取的文件中添加以下内容:
nihao01
nihao02
nihao03
file = open("file01.txt", "r")
lines = file.readlines()
for line in lines:
print(line)
file.close()执行结果
nihao01
nihao02
nihao03
1.4.5、readline()方法
readline()方法用于读取文件的一行内容,并将其存储为一个字符串。每次调用readline()方法会读取文件中的下一行内容。例如,要读取名为“file01.txt”的文件的第一行内容,可以使用以下代码:
file = open("file01.txt", "r")
line = file.readline()
print("输出第一行")
print(line)
print("输出第二行")
line = file.readline()
print(line)
file.close()执行结果
输出第一行 nihao01
输出第二行 nihao02
1.5、写文件
1.5.1、写入文件时的不同模式
覆盖模式(“w”):打开文件并将内容写入文件,如果文件存在,则覆盖原有内容。如果文件不存在则创建一个新的文件。
追加模式(“-a”):打开文件并将内容写入文件,如果文件存在,则在文件末尾追加内容。如果文件不存在则创建一个新的文件。
读写模式(“r+”):打开文件供读取和写入,如果文件存在,则覆盖原有内容。如果文件不存在,将抛出 FileNotFondError 异常。
1.5.2、写入字符串数
写入字符串数据
with open("file.txt", "w") as file:
file.write("nihao,zhangsan\n")
file.write("nihao,lisi")
file.close()1.5.3、写入字节数据
使用 write() 方法将字节数据写入文件。
可以使用 encode() 方法将字符串转换为字节数据进行写入。
写入字节数据
with open("file.txt", "wb") as file:
content = "Hello, World!\n"
file.write(content.encode("utf-8"))
file.close()1.5.4、wirtelines()
该函数元素为列表,因此在使用该函数时,列表中的元素最后需要加入换行符"\n",否则得到的将是一整行结果,如下
file = open("file.txt", "w")
seq = ["111", "222", "333"]
file.writelines(seq)
file.close()文件内容:
111222333
如果需要让每个列表元素单独一行,需要加"\n":seq = ["111", "222", "333"]
1.6、重命名文件
语法
os.rename(要重命名的文件/文件夹,新的文件/文件夹)
import os
os.rename("file.txt", "file01.txt") # 目标文件不能存在否则报错1.7、Python中的seek函数
在Python中,文件操作是一项重要的任务。我们常常需要读取、写入或者修改文件的内容。在处理文件时,我们常常需要定位到文件的某个位置进行操作,这时就需要使用到sekk函数。
seek函数是Python的内建函数,它用于改变当前读写位置。函数的定义如下:
file.seek(offset, whence)
其中:
file:指的是文件
offset:将光标向前移动 n 个位置
whence:光标远点,一般参数为0,1,2
0-将开头作为光标原点
1-将当前作为光标原点
2-将末尾作为光标原点
1.7.1、准备一个文件
# 打开一个文件并指定文件路径
file_path = "file.txt"
# 使用 w 模式打开文件,以便写入数据
with open(file_path, "w", encoding="utf-8") as file:
# 向文件写入示例数据
file.write("这是第一行\n")
file.write("这是第二行\n")
file.write("这是第三行\n")
file.write("这是第四行\n")
file.write("这是第五行\n")
file.close()1.7.2、seek函数应用举例
示例1:读取文件前两个字
# 打开一个文件并指定文件路径
file_path = "file.txt"
# 1 读取前两个字符
with open(file_path, "r") as file:
data = file.read(2)
print("读取前两个字符:", data)
file.close()执行结果:
读取前两个字符: 这是
示例2:使用 seek() 将文件指针移动到第 2 个汉字字符的位置(索引 2, 1个汉字占 2 个位置)
file_path = "file.txt"
with open(file_path, "r") as file:
file.seek(2)
data = file.read(3)
print("再次读取三个字符:", data)
file.close()执行结果:
再次读取三个字符: 是第一
备注:
seek(2):向右移两个指针(一个汉字)
file.read(3):输出指针后的三个字符
示例3:
# 3 使用 seek() 将文件指针移动到文件末尾
file_path = "file.txt"
with open(file_path, "r") as file:
file.seek(0, 2)
data = file.read()
print("读取文件末尾:", data)
file.close()执行结果:
读取文件末尾:
备注:
file.seek(0, 2):将指针移动到文件末尾
file.read():读取指定后所有字符
示例4:
# 4 使用 seek() 将文件指针移动到第二行开头(索引12)
file_path = "file.txt"
with open(file_path, "r") as file:
file.seek(0, 0)
file.seek(12)
data = file.read()
print("读取第二行及其后内容:", data)
file.close()执行结果:
读取第二行及其后内容:这是第二行
这是第三行
这是第四行
这是第五行
备注:
file.seek(0, 0):将指针移动到文件起点
file.seek(12):将指针向右移动12个索引(每两个索引为一个函数)
data = file.read(): 读取指针后的所有字符
1.8、文件的删除
os 模块适用于删除单个文件或空目录;shutil 模块适用于删除单个文件或非空目录;而使用外部命令删除文件(os.system(),subprocess.call())则需要慎重考虑命令的风险和安全性。
1.8.1、使用 os.remove()方法删除文件
import os
os.remove("file.txt")1.8.2、使用 os.unlink() 方法删除文件
import os
os.unlink("file.txt")二、目录操作
2.1、获取程序运行路径
>>> import os
>>> os.getcwd()
'C:\\Users\\Lenovo'2.2、列出当前文件夹下所有文件和文件夹
import os
os.listdir("d:\\")
for file in os.scandir():
print(file.name, file.is_dir())2.3、创建单层文件夹
import os
os.mkdir("mydir")2.4、创建多层文件夹
import os
os.makedirs("我的文件夹")
os.mkdir("第一层文件夹/第二层文件夹/第三层文件夹")2.5、命名文件夹
语句
os.rename(要重命名的文件/文件夹, 新的文件/文件夹)
import os
os.rename("mydir","dir01")2.6、删除文件夹
语句:
shutil.rmtree(要删除的文件夹)
import shutil
shutil.rmtree("dir01")