文章目录
1. 文件的基本操作
打开文件
变量名=open(filename,mode,encoding)
读
变量名.read()
写
变量名.write(s)
关闭文件
变量名.close
def my_write():
file=open("demo1.txt","w",encoding="utf-8")
file.write('写入一行数据')
file.close()
def my_read():
file=open("demo1.txt","r",encoding="utf-8")
print(file.read())
file.close()
# 主程序运行
if __name__ == '__main__':
my_write()
my_read()
1.1 打开模式
打开模式 | 模式说明 |
---|---|
r | 以只读模式打开,文件指针在文件的开头,如果文件不存在,程序抛异常 |
rb | 以只读模式打开二进制文件,如图片文件 |
w | 覆盖写模式,文件不存在时创建,文件存在时内容覆盖 |
wb | 覆盖写模式写入二进制数据,文件不存在时创建,文件存在时内容覆盖 |
a | 追加写模式,文件不存在时创建,文件存在时在文件最后追加内容 |
+ | 与w/r/a等一同使用,在原有功能的基础上增加同时读写功能 |
1.2 文件读写方法
读写方法 | 功能说明 |
---|---|
file.read(size | 从文件中读size个字符或字节,如果没有给定的参数时,则读取文件中的全部内容 |
file.readline(size) | 读取文件中的一行数据,如果给定参数时,则读取这一行中的size个字符或字节 |
file.readlines() | 从文件中读取所有内容,结果为列表类型 |
file.write(s) | 将字符串s写入文件 |
file.writelines(lst) | 将内容全部为字符串的列表lst写入文件 |
file.seek(offset) | 改变当前文件操作指针的位置,英文占一个字节,中文gbk编码占两个字节,utf-8编码占三个字节 |
写入一行数据
def my_write():
file=open("demo1.txt","w",encoding="utf-8")
file.write('写入一行数据')
file.write('\n')
file.close()
# 主程序运行
if __name__ == '__main__':
my_write_list("demo1.txt",lst)
写入数组数据
def my_write_list(file,lst):
f=open("demo1.txt","a",encoding="utf-8")
f.writelines(lst)
f.close()
# 主程序运行
if __name__ == '__main__':
lst=['text1\t','text2\n','text3\t','text4\n']
读取数据
def my_read(filename):
file=open(filename,"w+",encoding="utf-8")
file.write('我们都有一个家,名字叫中国\n') #写入完成,文件的指针在最后
file.write('兄弟姐妹都很多,景色也不错\n')
# seek 修改文件指针的位置
file.seek(0)
# 读取
# s=file.read(2) # 读取指定的2个字符
# s=file.readline() # 读取一行数据
# s=file.readline(2) # 读取一行中的2个字符
s=file.readlines() # 读取所有,一行为列表中的一个元素
print(type(s),s)
file.seek(3) # 3个字节,一个中文占三个字节,utf-8
s=file.read()
print(type(s),s)
file.close()
# 主程序运行
if __name__ == '__main__':
my_read("demo1.txt")
输出
<class ‘list’> [‘我们都有一个家,名字叫中国\n’, ‘兄弟姐妹都很多,景色也不错\n’]
<class ‘str’> 们都有一个家,名字叫中国
兄弟姐妹都很多,景色也不错
1.3 文件复制
文件复制就是一个边读边写的过程
def copy(src,new_path):
# 打开源文件
file1=open(src,'rb')
# 打开目标文件
file2=open(new_path,'wb')
# 开始复制,边读边写
s=file1.read() # 读取源文件所有
file2.write(s) # 向目标文件写入所有
#关闭
file2.close()
file1.close()
if __name__ == '__main__':
src='D:/home/1.png'
new_path='D:/home/2.png'
copy(src,new_path)
1.4 with语句
又称上下文管理器,在处理文时,无论是否产生异常,都能保证with语句执行完毕后关闭已经打开的文件,这个过程是自动的,无需手动操作。
语法结构:
with open(...)as file:
pass
写入文件
def write_fun():
with open('demo1.txt', 'w',encoding='utf-8') as f:
f.write('我今天学习了with语句')
if __name__ == '__main__':
write_fun()
读文件
def read_fun():
with open('demo1.txt', 'r',encoding='utf-8') as f:
print(f.read())
if __name__ == '__main__':
read_fun()
复制文件
def copy(src_file,target_file):
with open(src_file,'r',encoding='utf-8') as f1:
with open(target_file,'w',encoding='utf-8') as f2:
f2.write(f1.read())
if __name__ == '__main__':
copy('demo1.txt','demo2.txt')
2. os模块,目录与文件的相关操作
函数名称 | 描述说明 |
---|---|
getcwd() | 获取当前的工作路径 |
listdir(path) | 获取path路径下文件和目录信息,如果没有指定path,则获取当前路径下的文件和目录信息 |
mkdir(path) | 在指定路径下创建目录(文件夹) |
makedirs(path) | 创建多级目录 |
rmdir(path) | 删除path下的空目录 |
removedirs(path) | 删除多级目录 |
chdir(path) | 把path设置为当前目录 |
walk(path) | 遍历目录树,结果为元组,包含所有路径名、所有目录列表和文件列表 |
remove(path) | 删除path指定的文件 |
rename(old,new) | 将old重命名为new |
stat(path) | 获取path指定的文件信息 |
startfile(path) | 启动path指定的文件 |
2.1 查看当前工作路径
import os
print('获取当前工作路径os.getcwd()=',os.getcwd())
2.2 指定路径下的所有目录及文件
lst=os.listdir()
print('当前路径下的所有目录及文件',lst)
print('指定路径下的所有目录及文件',os.listdir('./'))
2.3 创建目录
如果要创建的文件夹存在,则程序报错FileExistsError
# 创建单个目录
os.mkdir('./01')
# 级联创建
os.makedirs('./01/02/01/01',exist_ok=True)
2.4 删除目录
# 删除单个目录,如果删除的目录不存在,程序会报错
# 删除单个目录,如果目录不为空,程序会报错
os.rmdir('./01/02/01')
# 级联删除
os.removedirs('./01/02/01/01')
2.5 改变当前工作路径
# 改变工作路径
os.chdir('D:/home')
print('获取当前工作路径os.getcwd()=',os.getcwd())
2.6 遍历目录树
# 遍历目录树,递归
for dirs,dirlst,filelst in os.walk('D:/home/02'):
print(dirs,dirlst,filelst)
2.7 删除文件
当文件不存在,报错 FileNotFoundError
import os
# 当文件不存在,报错 FileNotFoundError
os.remove('./demo1.txt')
2.8 重命名
import os
#
os.rename('./demo2.txt','./demo1.txt')
2.9 获取文件信息
# 转换时间格式
import time
def date_format(longtime):
s=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime))
return s
#
info=os.stat('./demo1.txt')
print(info)
print('最近一次访问时间是:',date_format(info.st_atime))
print('在windows操作系统中显示的文件的创建时间:',date_format(info.st_ctime))
print('最后一次修改时间是:',date_format(info.st_mtime))
print('文件的大小(单位是字节):',info.st_size)
输出
os.stat_result(st_mode=33206, st_ino=3659174697485022, st_dev=11137044440818564311, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1722317759, st_mtime=1722317759, st_ctime=1722317759)
最近一次访问时间是: 2024-07-30 13:35:59
在windows操作系统中显示的文件的创建时间: 2024-07-30 13:35:59
最后一次修改时间是: 2024-07-30 13:35:59
文件的大小(单位是字节): 0
3. os.path模块
提供了一些目录或文件的操作函数
函数名称 | 描述说明 |
---|---|
abspath(path) | 获取目录或文件的绝对路径 |
exists(path) | 判断目录或文件在磁盘上是否存在,结果为bool类型,如果目录或文件在磁盘上存在,结果为true,否则为false |
join(path,name) | 将目录与目录名或文件名进行拼接,相当于字符串的+操作 |
splitext() | 分别获取文件名和后缀名 |
basename(path) | 从path中提取文件名 |
dirname(path) | 从path中提取路径(不包含文件名) |
isdir(path) | 判断path是否是有效路径 |
isfile(path) | 判断 file是否是有效文件 |
3.1 获取目录或文件的绝对路径
print(os.path.abspath('./demo1.txt'))
3.2 判断目录或文件是否存在
# 判断文件是否存在
print(os.path.exists('./demo1.txt'))
# 判断目录是否存在
print(os.path.exists('./01'))
输出
True
True
3.3 拼接路径
print(os.path.join('D:/python/demo2/file','demo1.txt'))
输出
D:/python/demo2/file/demo1.txt
3.4 提取文件名
print(os.path.basename('./demo1.txt'))
输出
demo1.txt
3.5 分割文件名和后缀名
print(os.path.splitext('./demo1.txt'))
输出
(‘./demo1’, ‘.txt’)
3.6 提取路径
print(os.path.dirname('D:/python/demo2/file/demo1.txt'))
输出
D:/python/demo2/file
3.7 判断一个路径是否是有效
print(os.path.isdir('./01'))
输出
True
3.8 判断文件是否有效
print(os.path.isfile('./demo1.txt'))
输出
True