前言
本文将梳理小结python中常用的文件操作命令,主要内容包括:文件的读写方式、文件指针seek的使用、with的使用、文件读取后数据的预处理(split、strip)、os常用命令、sys常用命令。
以下是本篇文章正文内容,首先介绍python中文件常用的读写模式。
提示:本文的编译环境为Windows,Linux下的文件操作有部分不同。本文使用的IDE为Vscode,文中有用到绝对路径以及相对路径,vscode下相对路径的使用需要配置launch.json文件。即在configurations内的花括号“{}”内添加下行设置即可。
"cwd": "${fileDirname}"
Vscode路径补全插件(推荐):Path Autocomplete
一、python文件常用读写模式
文件的读取模式
以下测试在同一目录下的hello.txt文件中操作,文件内容如下:
- r:只能读取 ,file_ptah指定路径对应的文件无法读取,抛出FileNotFoundError
f = open(file_path,"r")
f = open("./hello.txt","r")
print(f.read())
f.close() # 文件操作结束后记得关闭文件(养成好习惯,避免造成文件读写冲突)
输出:
- r+:可进行读写操作,写操作默认覆盖原有内容。(文件指针在文件开始部分)
-f = open(file_path,"r+")
f = open("./hello.txt","r+")
f.write("this is a line written by r+ mode!\n")
f.close()
可看到文件结果如下:
可以看到原有的文件内容已被覆盖。
注意: 不要在打开的文件中同时进行读写操作!程序会自动关闭文件对象:
f = open("./hello.txt","r+")
f.write("this is a line written by r+ mode!\n")
print(f.read())
f.close()
上述操作的无任何输出,因为f.read()
操作关闭了文件对象。
- rb: (b即binary),读取文件内容为二进制文件格式,文件指针默认放在开头。
f = open(file_path,"rb")
该命令常用于打开非常规文本数据,例如图片、视频等数据。
f = open("./test.jpg","rb")
print(f.read())
f.close()
输出:
文件指针操作
通过上文不难发现很多文件读取操作的文件指针是默认置于文件开头的,如果要修改文件指针位置就需要用到seek操作。
- 文件指针操作:fileobject.seek(offset,[op:whence])
fileobject.seek(0,0)
=> 文件开头
其中可选参数为whence:取值为0(default),1,2。
-
0:代表的位置为文件开头
-
1:代表当前文件指针位置(可接续之前的seek操作)
-
2:代表文件末尾
- offset为偏移量,其偏移取决于whence指定的位置,为0代表从文件开头进行偏移。
在r+模式下,默认的写操作为覆盖原有内容,我们若想在原始文件内容后写入,即可以通过文件指针操作来实现。
f = open("./hello.txt","r+")
f.seek(0,2) #将文件指针置于文件尾部
f.write("Using seek: This is a new line written by r+!\n")
f.close()
结果:
其他seek操作不再赘述~
文件写入模式
- w:只能写入 ,file_ptah指定路径对应的文件不存在则创建对应的新文件
f = open(file_path,"w")
- 先清空原有内容再覆盖新内容(故使用seek操作也无法实现追加写入)
f = open("./hello_1.txt","w")
f.write("Using seek: This is a new line written by r+!\n")
f.close()
输出:
- w+:可读写 ,file_ptah指定路径对应的文件不存在则创建对应的新文件
f = open(file_path,"w+")
- 读取内容为空,因为该模式下先清空原有内容在进行读取操作
f = open("./hello_2.txt","w+")
f.write("new context")
f.close()
输出:
- wb:只写 ,file_ptah指定路径对应的文件不存在则创建对应的新文件
-f = open(file_path,"wb")
-
f = open("./hello_3.txt","wb")
f.write(b"hello world")
f.close()
注意: 写入数据格式为bytes字节类型
输出:
追加写模式:
- a:只能写文件,file_ptah指定路径对应的文件不存在则创建对应的新文件
f = open(file_path,"a")
- 默认追加内容到文件尾部
f = open("./hello.txt","a")
f.write("A line written by a mode!")
f.close()
输出:
- a+:可读写,file_ptah指定路径对应的文件不存在则创建对应的新文件
f = open(file_path,"a+")
- 读不到内容,因为文件指针默认在文件尾部,可通过seek移动指针进行读取
f = open("./hello.txt","a+")
f.seek(0,0)
print(f.read())
f.close()
输出:
- ab:只写,file_ptah指定路径对应的文件不存在则创建对应的新文件
f = open(file_path,"ab")
- 以二进制形式进行内容追加
with的使用
with的使用很宽泛,是一种上下文管理协议,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作。这里仅介绍with正在文件操作管理中的作用,常用的with使用如下:
with open("./hello.txt","r") as f: #f为读取的文件对象的简称
print(f.read())
输出:
可以看到代码简化了很多,而且不用再手动关闭文件连接,with在使用文件读取完后会自动释放连接。
二、常用os、sys文件操作
常用文件操作梳理
- note:所有函数接口只列出主要参数,可选参数详见官方文档
import os
import sys
常用操作(功能见注释):
文件目录
# 结合路径处理使用效果更佳
os.mkdir(path) # 创建一个文件目录,若目标文件目录存在,则抛出异常
os.mkdirs(path,exist_ok=False) # 递归创建函数,exist_ok是False(默认),与os.mkdir类似,目标目录存在则抛出异常。
os.listdir(dir_name) # 列出文件目录下的所有子文件(遍历文件夹时常用)
os.chdir(path) # 改变当前目录,到指定的文件目录中 path为要切换的新路径
os.rename(src,dst) # 重命名目录名或者文件名。重命名后的文件名如果存在,则重命名失败
文件路径处理
os.path.exists() # 可结合os.mkdir()等使用
os.path.isdir() # 判断目标是否为目录
os.path.isfile() # 判断目标是否为文件
os.path.join(path_a,path_b) # 连接两个目录文件(常用) 输出:path_a\\path_b
sys操作
# 常用指个人常用,欢迎在评论区补充
sys.exit(arg) # 退出程序 arg默认为0 一般可用在程序结尾,执行完所有内容后结束程序
sys.path.append(path) # path一般为根路径 常用于跨文件夹调用场景 例如:从A文件夹调用B文件夹的函数 添加B文件夹对应的根路径
参考链接
os.mkdir()与os.makedirs()的使用方法
os常用文件操作
以上便为本文全部内容,感谢阅读。
总结
- 以上就是今天的文件常用操作梳理,本文仅仅简单梳理了一些文件读写以及os、sys库的常见操作,若在日常使用中遇到更复杂的操作情形时,查阅python官方文档即可。