python基础 文件
文件
编码格式
Python解释器使用的是Unicode
.py文件在磁盘上使用UTF-8存储
文件读写原理
文件的读写俗称‘IO操作’
文件读写操作流程


内置函数open()创建文件对象
通过IO流将磁盘文件中的内容与程序中的对象中的内容进行同步
语法规则
file = open(filename[,mode,encoding])
被创建的文件对象 = 创建文件对象的函数(要创建或打开的文件名称[,打开模式,默认为只读, 编码格式,默认为gbk]
文件读写操作
1 2 3 4 5 6 7 | if __name__ = = "__main__" : file = open ( 'a.txt' , 'r' , encoding = 'utf-8' ) text = file .readlines() text = [line.strip( '\n' ) for line in text] print (text) file .close() |

常用的文件打开模式
文件的类型
按文件中数据的组织形式,文件可分为两大类:
文本文件:存储的是普通‘字符’文本,默认为unicode字符集,可以使用记事本程序打开
二进制文件:把数据内容用字节进行存储,无法用记事本打开,必须使用专用的软件打开,例:MP3文件,jpg文件,doc文档等
打开模式
|
描述
|
r
|
以只读模式打开文件,文件的指针将会放在文件的开头
|
w
|
以只写模式打开文件,如果文件不存在则创建,如果文件存在,则覆盖原有内容,文件指针在文件的开头
|
a
|
以追加模式打开文件,如果问件不存在则创建,文件指针在文件开头,如果文件存在,则在文件末尾追加,文件指针在原文件末尾
|
b
|
以二进制方式打开文件,不能单独使用,需要与其它模式一起使用,rb或wb
|
+
|
一度写方式打开文件,不能单独使用,需要与其他模式一起使用,如a+
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | if __name__ = = "__main__" : file = open ( 'a.txt' , 'rb' , encoding = 'utf-8' ) text = file .readlines() text = [line.strip( '\n' ) for line in text] print (text) file .close() file1 = open ( 'b.txt' , 'w' , encoding = 'utf-8' ) file1.write( 'Python' ) file1.close() file1 = open ( 'b.txt' , 'a' , encoding = 'utf-8' ) file1.write( 'Python' ) file1.close() src_file = open ( 'aa.png' , 'rb' ) target_file = open ( 'copyaa.png' , 'wb' ) target_file.write(src_file.read()) target_file.close() src_file.close() |

文件对象常用的方法
方法名
|
说明
|
read([size])
|
从文件中读取size个字节或字符的内容返回。若省略,则一次读完文件所有内容
|
readline()
|
从文本文件中读取一行内容
|
readlines()
|
从文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回
|
write(str)
|
将字符串str内容写入文件
|
writelines(s_list)
|
将字符串列表s_list写入文本文件,不添加换行符
|
seek(offset[,whence])
|
把文件指针移动到新的位置,offset表示相对于whence的位置:offset:为正往结束方向移动,为负往开始方向移动
whence不同的值代表不同含义:
0:从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件为开始计算
|
tell()
|
返回文件指针的当前位置
|
flush()
|
把缓冲区的内容写入文件,但不关闭文件
|
close()
|
把缓冲区的内容写入文件,同时关闭文件,释放文件对象相关资源
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | file1 = open ( 'b.txt' , 'a' , encoding = 'utf-8' ) li = [ 'P' , 'Y' , 'T' ] file1.writelines(li) file1.close() file = open ( 'a.txt' , 'r' , encoding = 'utf-8' ) file .seek( 4 ) print ( file .read()) print ( file .tell()) file .close() file = open ( 'a.txt' , 'a' ) file .write( 'Hello' ) file .flush() file .write( ' a' ) file .close() |

with语句
with语句可以自动管理上喜爱无资源,不论什么原因跳出with块,都能保证文件正确的关闭,以此达到释放内存的目的
1 2 3 4 5 6 7 8 9 | # with 语句 from contextlib import contextmanager @ contextmanager def demo(): print ( 'enter' ) yield 'demo' print ( 'exit' ) with demo() as value: print (value) |

目录操作
os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的操作系统上运行,得到的结果可能不一样
os模块与os.path模块用于对目录或文件进行操作
函数
|
说明
|
getcwd()
|
返回当前工作目录
|
listdir(path)
|
返回指定路径下的文件和目录信息
|
mkdir(path)
|
创建目录
|
makedirs(path1/path2)
|
创建多级目录
|
rmdir(path)
|
删除目录
|
removedirs(path1/path2)
|
删除多级目录
|
chdir(path)
|
将path设置为当前工作目录
|
1 2 3 4 5 6 7 8 9 10 11 12 13 | # os模块 import os os.system( 'notepad.exe' ) # 打开记事本 os.system( 'calc.exe' ) # 打开计算器 os.startfile( 'D:\yuque-desktop' ) # 打开文件夹 print (os.getcwd()) # 显示目录 lst = os.listdir( 'stud' ) # 显示文件夹下所有文件 print (lst) os.mkdir( 'new' ) # 创建new目录 os.makedirs( 'news/new' ) # 创建多级目录 os.rmdir( 'new' ) # 删除文件 os.removedirs( 'news/new' ) # 删除多级文件夹 os.chdir( 'stud' ) # 将stud设置为当前工作目录 |
os.path模块操作目录相关
函数
|
说明
|
abspath(path)
|
用于获取文件或目录的绝对路径
|
exists(path)
|
用于判断文件是否存在,是则True,否则False
|
join(path,name)
|
将目录与目录或文件名拼接起来
|
splitext()
|
分离文件名或扩展名
|
basename(path)
|
从一个目录中提取文件名
|
dirname(path)
|
从一个路径中提取文件路径,不包括文件名
|
isdir(path)
|
用于判断是否为路径
|
1 2 3 4 5 6 7 8 9 | # os.path模块 import os.path print (os.path.abspath( 'd.py' )) print (os.path.exists( 'demo.py' )) print (os.path.join( 'd:\\python' , 'a.py' )) print (os.path.split( 'demo.py' )) print (os.path.basename( 'D:\PycharmProjects\pystu\d.py' )) print (os.path.dirname( 'D:\PycharmProjects\pystu\d.py' )) print (os.path.isdir( 'D:\PycharmProjects\pystu\d.py' )) |
其他
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | # os # 显示当前目录 import os print ( "当前工作目录:" , os.getcwd()) # 第一种 from pathlib import Path # 第二种 print ( "当前工作目录:" , Path.cwd()) # 建立一个新目录 os.mkdir( 'test_folder' ) # 在当前文件夹创建新目录 print ( "目录是否存在:" , os.path.exists( "test_folder" )) # 创建包含子目录的目录 os.makedirs( 'tmp/level' ) print ( "目录是否存在:" , os.path.exists( 'tmp/level' )) # os.access()方法适用当前的uid/gid尝试访问路径 import os print (os.access( 'a.txt' , os.F_OK)) # 测试path是否存在 print (os.access( 'a.txt' , os.R_OK)) # 测试path是否可读 print (os.access( 'a.txt' , os.W_OK)) # 测试path是否可写 print (os.access( 'a.txt' , os.X_OK)) # 测试path是否可执行 # os.chdir()方法用于改变当前目录到指定的路径 import os, sys path = r 'D:\PycharmProjects\pystu\a' # 查看当前工作目录 retval = os.getcwd() print ( "当前工作目录%s" % retval) # 修改当前工作目录 os.chdir(path) # 查看修改后的工作目录 retval = os.getcwd() print ( "目录修改成功,当前目录%s" % retval) # os.chflags()方法设置路径的标记为数字标记,只支持Unix,会报错:AttributeError: module 'os' has no attribute 'chflags' import os, stat path = 'a.txt' flags = stat.SF_NOUNLINK retval = os.chflags(path,flags) print ( '返回值:%s' % retval) # os.chmod()方法用于更改文件或目录的权限 import os, sys, stat os.chmod( 'a.txt' , stat.S_IXGRP) # 组用户有执行权限 os.chmod( 'a.txt' , stat.S_IWOTH) # 设置文件可以被其他用户写入 os.chmod( 'a.txt' , stat.S_IXOTH) # 其他用户有执行权 os.chmod( 'a.txt' , stat.S_IROTH) # 其他用户有读权限 os.chmod( 'a.txt' , stat.S_IRWXO) # 其他用户有全部权限 os.chmod( 'a.txt' , stat.S_IXGRP) # 组用户有执行权 os.chmod( 'a.txt' , stat.S_IWGRP) # 组用户有写权限 os.chmod( 'a.txt' , stat.S_IRGRP) # 组用户有读权限 os.chmod( 'a.txt' , stat.S_IRWXG) # 组用户有全部权限 os.chmod( 'a.txt' , stat.S_IXUSR) # 拥有者具有执行权限 os.chmod( 'a.txt' , stat.S_IWUSR) # 拥有者具有写权限 os.chmod( 'a.txt' , stat.S_IRUSR) # 拥有者具有读权限 os.chmod( 'a.txt' , stat.S_IRWXU) # 拥有者具有全部权限 os.chmod( 'a.txt' , stat.S_ISVTX) # 目录里文件目录只有拥有者才可删除更改 os.chmod( 'a.txt' , stat.S_ISGID) # 执行此文件其进程有效组为文件所在组 os.chmod( 'a.txt' , stat.S_ISUID) # 执行此文件其进程有效用户为文件所有者 os.chmod( 'a.txt' , stat.S_IREAD) # windows下设为只读 os.chmod( 'a.txt' , stat.S_IWRITE) # windows下取消只读 # os.chown()方法用于改变当前目录文件所有者,unix有效 import os,sys os.chown( 'a.txt' , 100 , - 1 ) # 设置所有者ID为100 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报