【Python】文件操作和文件夹操作的学习笔记

1. 常用操作

/:路径拼接,eg. path / 'folder'

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 查看文件(夹)信息

获得完整路径的字符串

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 文件夹操作代码

新建文件夹

# 创建文件夹
os.mkdir(folder)

删除某个文件夹

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')
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值