1. 常用操作
1.1 路径拼接
/
:路径拼接运算符,eg. path / 'folder'
Path("folder1", "folder2", ...)
:在创建时拼接路径
1.2 类型转换:path.as_posix()
2. 工作目录设置
设置工作目录:
首先可以查看一下工作目录,
# 查看当前的工作目录
print(os.getcwd())
如果工作目录不正确,可以用os.chdir()函数来进行修改;
获取当前运行文件目录
使用pathlib
Path(__file__).parent
使用os
os.path.dirname(__file__)
将工作目录重置为当前运行文件的父目录
os.chdir(os.path.dirname(__file__))
3. 文件路径(字符串)操作
关于Pathlib的用法介绍,请参考博文《Python Path – How to Use the Pathlib Module with Examples》
路径拼接:path.joinpath()
获取文件路径末尾的文件名:path.name
Windows路径:r"windows path"
例如:
path = r"C:\Users\Username\Documents\file.txt"
4. 新建
4.1 新建文件夹
4.1.1 递归新建文件夹
folder.mkdir(parents=True)
parents=True
:允许递归创建父目录;
4.1.2 单级新建文件夹
# 创建文件夹
os.mkdir(folder)
4 查看文件(夹)信息
获得完整路径的字符串
pypath.as_posix()
Note:
"POSIX"是指可移植操作系统接口(Portable Operating System Interface),是一组面向UNIX和类UNIX操作系统的标准接口规范。POSIX标准旨在促进跨平台的软件兼容性和可移植性。
在路径表示方面,POSIX风格指的是将路径中的分隔符使用斜杠(/)来表示。这与UNIX和类UNIX操作系统的路径表示方式一致。例如,/usr/local/bin
就是一个POSIX风格的路径表示。相比之下,Windows操作系统中的路径表示方式使用反斜杠(\),如C:\Program Files\Python
。
pathlib
中的Path
对象可以代表不同操作系统下的路径,包括Windows和Unix等。使用as_posix()
方法可以将路径转换为POSIX风格的字符串表示。这在需要在不同操作系统之间共享路径时非常有用,因为POSIX风格的路径在不同操作系统之间是通用的。
查看 文件(夹)绝对路径
os.path.abspath(path_string)
判断文件(夹)是否存在
可以使用pathlib
中的方法(使用了面向对象的方式):
from pathlib import Path
my_file = Path("/path/to/file")
if my_file.is_file():
# file exists
if my_file.is_dir():
# directory exists
if my_file.exists():
# file or directory exists
5 文件读写
5.1 获取文件扩展名——os.path.splitext()
使用函数os.path.splitext()获取file字符串的扩展名;
5.2 获取文件(夹)路径的尾部——os.path.basename()
其实我之前先看到的是os.path.split()
函数,
关于os.path.split()
的解释,我们可以看看python的官方文档:
而os.path.basename()
其实就是返回os.path.split()
的第二个返回值,所以直接使用os.path.basename()
就可以了;
4.3 获取此路径中的文件名(尾部最后一个文件名)
os.path.basename(path)
4.4 获取路径中的文件name
Path写法:
Path(__file__).stem
4.4 Youki常用文件类型的读写
4.4.1 TXT文件读写
# 直接使用文件流的迭代器进行读取
with open(txt, "r") as f:
for line in f: # 直接使用文件流的迭代器进行读取
print(line)
在将多行列表数据写入.txt
文件时,使用f.writelines()
函数,因为f.writelines()
函数会比f.write()
函数效率更高一些;
4.4.2 JSON文件读写
.json
写入文件
# 以json格式写入文件
with open(json_file, "w") as f:
json.dump(data, f)
.json
追加写文件
# 将打开方式设置为
with open(json_file, "a") as f:
json.dump(data, f)
这里我们看看《菜鸟教程》中对a
追加模式的解释,
模式
a
: 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
.json
读取文件
# 读取json格式文件
with open("instances_val2017.json", "r") as f:
val2017 = json.load(f)
6 文件夹操作代码
删除某个文件夹
if os.path.isdir(dir):
shutil.rmtree(dir)
判断string是否是文件夹
# 创建文件夹
assert os.path.isdir("path/folder")
遍历文件夹中所有的子文件(不包含孙文件):
p = Path(path_string)
for file in p.iterdir():
print(file)
# 遍历当前文件夹的直接子文件
for file in os.listdir(root):
print(file)
遍历文件夹中所有的子孙文件(包含子文件、孙文件):
# 遍历当前文件夹的直接子文件
for root, dirs, files in os.walk(path):
for file in files:
# 获取文件所属目录
print(root)
# 获取文件路径
print(os.path.join(root, file))
7 文件检索:glob
通配符:*?[a-z]
星号*
:匹配一个文件名段中的0个或多个字符。
问号?
:匹配文件名中该位置的单个字符。
字符区间[a-z]:使用字符区间[a-z]|[0-9]
,可匹配字符集中的单个字符。
7.1 获取检索结果的迭代器:glob.iglob()
它与glob.glob()
的区别是:glob.glob()
同时获取所有匹配路径的list
,而glob.iglob()
获取一个迭代器,每次返回一个匹配路径。
7.2 在文件夹中获得指定格式的文件列表
import glob
img_list = glob.glob("folder/*.format")
8 判断两个文本文件是否相同
示例代码如下:
import filecmp
# 如果两边路径的头文件都存在,进行比较
try:
status = filecmp.cmp("a.json", "b.json")
# 为True表示两文件相同
if status:
print("Files are the same")
# 为False表示文件不相同
else:
print("Files are different")
# 如果两边路径头文件不都存在,抛异常
except IOError:
print("Error:" + "File not found or failed to read")
9 临时文件
可以使用tempfile
模块来生成临时文件,请参考《Python tempfile(临时文件)》;
10 文件解压缩
Zip文件
关于.zip
文件的相关操作,请参考博文《如何使用Python压缩/解压缩zip文件?(代码示例)》;
import zipfile
with zipfile.ZipFile('data.zip') as myzip:
myzip.extractall('path')