Python-OS文件目录方法

  • os 模块提供了非常丰富的方法用来处理文件和目录。

文件操作

读写操作系列

os.open打开文件

  • os.open(file, flags[, mode]); flag用于选择是以什么模式打开,读写等。
  • 如os.O_RDWR 以读写的方式打开, os.O_CREAT: 创建并打开一个新文件。
import os
file = r"..\sample\s1.txt"
fp_wr = os.open(file, os.O_RDWR | os.O_CREAT)
os.write(fp_wr, "I am well".encode("utf-8"))
os.close(fp_wr)
fp_rd = os.open(file, os.O_RDONLY)
msg = os.read(fp_rd, 100)
print(msg)
os.close(fp_rd)

result:
b'I am well'

os.close关闭文件

  • os.close( fd )

os.read读取

  • os.read(fd, n),从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。

os.write(fd, str)

  • os.write(fd, str),写入字符串到文件描述符 fd中. 返回实际写入的字符串长度。

路径系列

os.getcwd()

  • os.getcwd()方法用于返回当前工作目录,是个绝对路径字符串。

os.listdir()

  • os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
  • 它不包括 . 和 … 即使它在文件夹中,只列出一层。
# path: 需要列出的目录路径
os.listdir(path)

os.pardir

  • 获取当前目录的父目录(上一级目录),以字符串形式显示目录名。
import os
print(os.getcwd())
result = os.pardir
print(os.path.abspath(result))

result:
F:\study\python\qt_study\qt_project\test
F:\study\python\qt_study\qt_project

Python os.chdir()

  • 改变当前工作目录到指定的路径,路径不存在时报错。
import os
dir_path = r"F:\study\python\qt_study\qt_project\sample"
curr_path = os.getcwd()
print(curr_path)
os.chdir(dir_path)
ch_dir = os.getcwd()
print(ch_dir)

result:
F:\study\python\qt_study\qt_project\test
F:\study\python\qt_study\qt_project\sample

os.path模块

os.path.abspath(path)
  • 返回绝对路径,如查找一个相对路径的绝对路径时可以使用。
os.path.basename(path)
  • 返回文件名,是返回最后一个反斜杠后面的内容,如果开始目录则返回最后一级目录名。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.abspath(dir_path))
print(os.path.basename(dir_path))
print(os.path.basename(file_name))

result:
F:\study\python\qt_study\qt_project\June
June
test.txt
os.path.dirname(path)
  • 返回文件路径,返回的是目录名,不会返回最后一级文件名。
  • 原来是啥路径就返回啥路径,原来没有,返回绝对路径,以字符串返回。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.dirname(dir_path))
print(os.path.dirname(file_name))
dir_path2 = "F:\study\python\qt_study\qt_project"
print(os.path.dirname(dir_path2))

result:
..
..\June
F:\study\python\qt_study
os.path.exists(path)
  • 如果路径 path 存在,返回 True;如果路径 path 不存在,返回 False。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.exists(dir_path))
print(os.path.exists(file_name))

result:
True
True
os.path.getsize(path)
  • 返回文件大小,如果文件不存在就返回错误,是文件夹名,则返回为0。
import os
dir_path = r"..\June"
file_name = r"..\June\test.txt"
print(os.path.getsize(dir_path))
print(os.path.getsize(file_name))

result:
0
4
os.path.isabs(path)
  • 判断是否为绝对路径。
os.path.isfile(path)
  • 判断是否为文件。
os.path.isdir(path)
  • 判断是否为目录。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"..\June\test.txt"

print(os.path.isabs(dir_path))
print(os.path.isabs(file_name))

print(os.path.isfile(dir_path))
print(os.path.isfile(file_name))

print(os.path.isdir(dir_path))
print(os.path.isdir(file_name))

result:
True
False
False
True
True
False
os.path.join(path1[, path2[, …]])
  • 把目录和文件名合成一个路径,只是把path拼起来,里面不是文件也会拼起来。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"test.txt"
dir_path2 = r"F:\study\python\qt_study\qt_project"
file_name2 = "June"
print(os.path.join(dir_path, file_name))
print(os.path.join(dir_path2, file_name2))

result:
F:\study\python\qt_study\qt_project\June\test.txt
F:\study\python\qt_study\qt_project\June
os.path.split(path)
  • 把路径分割成 dirname 和 basename,返回一个元组,其实就是把最后一级分开,放于元组中。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"..\June\test.txt"
print(os.path.split(dir_path))
print(os.path.split(file_name))

result:
('F:\\study\\python\\qt_study\\qt_project', 'June')
('..\\June', 'test.txt')
os.path.splitext(file)
  • 分割路径,返回路径名和文件扩展名的元组。
  • 可以用来取文件的后缀。
import os
dir_path = r"F:\study\python\qt_study\qt_project\June"
file_name = r"..\June\test.txt"
print(os.path.splitext(dir_path))
print(os.path.splitext(file_name))

('F:\\study\\python\\qt_study\\qt_project\\June', '')
('..\\June\\test', '.txt')

文件或文件夹重命名

os.rename文件或文件夹重命名

  • 用于重命名文件或目录。
  • 该方法没有返回值。
os.rename(os.rename(src, dst))

os.renames(old, new)

  • 递归地对目录进行更名,也可以对文件进行更名
import os
# 返回当前工作目录
cwd = os.getcwd()
# 列出目录文件夹
path_file = os.listdir(cwd)
print("当前目录下的文件及文件夹: %s" % path_file)
# 重命名
os.rename("test2", "test_rename")
os.rename("test2.txt", "test_rename.txt")
# 列出修改文件夹名和文件名后的目录文件夹
print("目录为: %s" % os.listdir(os.getcwd()))

创建目录

os.mkdir(文件夹/文件名字)

  • os.mkdir() 方法用于创建目录。
  • path -要创建的目录,可以是相对或者绝对路径。
  • 如果目录已经存在,则报错。
  • 不能连续创立文件夹,子文件夹,只能一级一级来。
  • .\ 就表示当前所在目录,…\ 表示当前所在目录的父目录。
# 在当前路径下创建名字为June的文件夹
import os
# 返回当前工作目录
cwd = os.getcwd()
os.mkdir(cwd+r"\June")

# 在June的文件夹下创建txt文件
import os
cwd = os.getcwd()
os.mkdir(cwd + r"\June")
path = cwd + r"\June"
os.mkdir(path + r"\JuneJuly.txt")

# 在June的文件夹下创建txt文件,使用相对路径
import os
cwd = os.getcwd()
os.mkdir(cwd + r"\June")
os.mkdir(r".\June\relative.txt")

os.makedirs(path[, mode])

  • 递归文件夹创建函数。像mkdir(), 但是会把所有不存在的目录都创建。
  • 目录存在时报错。
import os
dir_path = r"..\June"
print(os.listdir(dir_path))
os.makedirs(dir_path+"\\" + "Lucy\\Jim\\" + "l1.txt")
print(os.listdir(dir_path))
dir_path2 = dir_path+"\\" + "Lucy"
print(os.listdir(dir_path2))

result:
[]
['Lucy']
['Jim']

删除系列

os.rmdir(文件夹路径)

  • 删除指定的目录,即文件夹(不能删除文件),但是只能删除空的文件夹。
  • 当删除的文件夹不为空时,报OSError错误。
import os
dir = os.listdir("..\June")
print(dir)
os.rmdir("..\June\Lucy")
dir = os.listdir("..\June")
print(dir)

result:
['Lucy']
[]

os.removedirs(文件夹路径)

  • 用于递归删除目录, 如果子文件夹成功删除, removedirs()才尝试删除上一层的文件夹,直到文件不为空。
  • 当删除的最下层文件夹不为空时,报OSError错误。
    os.remove()

os.remove(文件路径)

  • os.remove() 方法用于删除指定路径的文件。
  • 如果指定的路径是一个目录,将抛出PermissionError。
import os
dir = os.listdir(r"..\June")
print(dir)
os.remove(r"..\June\test.txt")
dir = os.listdir(r"..\June")
print(dir)

result:
['Lucy', 'test.txt']
['Lucy']

应用举例

  • 删除一个文件夹
    文件夹下面会有子目录,每一层可能有文件和文件夹。
    我们已知的这些方法中只能删除空文件夹或者文件。
    决定先把文件一个个删掉,等成了空文件夹以后再删文件夹。
import os
dir_path = "..\June"

def remove_dir(path_name):
    dir_list = os.listdir(path_name)
    for i_dir in dir_list:
        name = os.path.join(path_name, i_dir)
        if not os.path.isdir(name):         #文件夹为空时删除
            os.remove(name)
        else:
            remove_dir(name)                #递归调用
            os.rmdir(name)


remove_dir(dir_path)
os.rmdir(dir_path)
  • 复制文件夹
    文件夹下的所有内容都复制到另一个文件夹。
    文件复制的本质是读取一个地方的东西,然后写入另一个地方。
# 将June\p1文件夹的内容全赋值到p2文件夹中
import os

src_path = r"..\June\p1"
dst_path = r"..\June\p2"


def copy_path(src_path, dst_path):
    all_dir = os.listdir(src_path)
    if os.path.isdir(src_path) and os.path.isdir(dst_path):
        for i_dir_file in all_dir:
            src_path_tmp = os.path.join(src_path, i_dir_file)
            dst_path_tmp = os.path.join(dst_path, i_dir_file)

            if os.path.isdir(src_path_tmp):
                os.makedirs(dst_path_tmp)
                copy_path(src_path_tmp, dst_path_tmp)
            else:
                with open(src_path_tmp, "rb") as fp_read:
                    msg = fp_read.read()
                    with open(dst_path_tmp, "wb") as fp_write:
                        fp_write.write(msg)
    else:
        print("不是文件夹")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值