目录
查看操作系统的名称
# 输出操作系统的名称 Windows 返回 'nt',Linux 返回'posix'
print(os.name)
查看路径的权限
import os
"""
R read 读
W write 写
F file 文件是否存在
X 可执行
"""
# 判断该路径是否有读取权限
print(os.access("hello.txt", os.R_OK))
# 判断该路径是否有写入权限
print(os.access("hello.txt", os.W_OK))
# 判断该路径是否存在
print(os.access("hello.txt", os.F_OK))
# 判断该路径是否有执行权限
print(os.access("hello.txt", os.X_OK))
修改路径的权限
import os
import stat
"""
ch mod change mode 改变权限
详细权限如下
stat.S_IXOTH: 其他用户有执行权0o001
stat.S_IWOTH: 其他用户有写权限0o002
stat.S_IROTH: 其他用户有读权限0o004
stat.S_IRWXO: 其他用户有全部权限(权限掩码)0o007
stat.S_IXGRP: 组用户有执行权限0o010
stat.S_IWGRP: 组用户有写权限0o020
stat.S_IRGRP: 组用户有读权限0o040
stat.S_IRWXG: 组用户有全部权限(权限掩码)0o070
stat.S_IXUSR: 拥有者具有执行权限0o100
stat.S_IWUSR: 拥有者具有写权限0o200
stat.S_IRUSR: 拥有者具有读权限0o400
stat.S_IRWXU: 拥有者有全部权限(权限掩码)0o700
stat.S_ISVTX: 目录里文件目录只有拥有者才可删除更改0o1000
stat.S_ISGID: 执行此文件其进程有效组为文件所在组0o2000
stat.S_ISUID: 执行此文件其进程有效用户为文件所有者0o4000
stat.S_IREAD: windows下设为只读
stat.S_IWRITE: windows下取消只读
"""
# 把目录的权限设为可执行
os.chmod("hello.txt", stat.S_IXUSR)
查看当前工作目录
import os
"""
cwd current work directory 当前工作目录
"""
# 得到当前工作目录
print(os.getcwd())
改变当前工作目录
import os
"""
ch change 改变
"""
# 把当前工作目录改为'/'(linux系统的根目录)
os.chdir('/')
查看目录下所有内容
import os
"""
list dir list directory 文件夹下所有内容(文件、文件夹)
"""
# 输出根目录下的所有内容,不输入参数,代表默认目录
print(os.listdir('/'))
创建文件夹
import os
"""
mk dir make directory 创建文件夹
make dirs make directorys 创建多个文件夹
两者的区别:mkdir创建的文件夹必须是上一层已经存在
例如:A文件夹内部没有任何文件夹,你可以mkdir(A/B):在A内部建立B文件夹
你不可以mkdir(A/B/C),因为你创建的是C文件夹,但是B文件夹本身不存在
makedirs无论上一层文件夹是否存在,都可以创建成功
例如:make dirs(A/B/C),系统反馈B文件夹不存在,那么mkdirs就先创建B文件夹,再创建A文件夹
"""
# 创建单个文件夹
os.mkdir('/Users/apple/Desktop/HELP/nihao')
# 创建多个文件夹
os.makedirs('/Users/apple/Desktop/HELP/nihao/nihao/shijie')
删除文件夹、文件
import os
"""
remove 删除文件,不能删除文件夹
rmdir 删除一个空文件夹
removedirs 删除多个空文件夹 removedirs('A')代表:删除A下面的所有空文件夹,递归删除
"""
# 删除一个文件
os.remove("nihao.txt")
# 删除一个空文件夹
os.rmdir('ceshi')
# 删除多个空文件夹
os.removedirs('A')
重命名路径
import os
"""
rename 重命名
renames 重命名多个
两者的区别:A文件下面有B
你可以用rename(A/B,A/C)把文件夹B的名称改为C,你不能rename(A/B,A/C/B),因为C文件夹不存在。
然而renames并不在意命名的文件夹上级目录是否存在,如果系统反馈上级目录不存在,那么就创建上级目录。这也是结尾加s的原因,因为涉及到多个文件夹
"""
# 将左边的文件名 改为 右边的名称
os.rename("hello.txt", "nihao.txt")
# 将左边的目录名 改为 右边的目录名
os.rename("/A/B", "/A/C")
# 将左边的目录或者文件 改为 右边的名称
os.renames("/A/B", "/A/C/B")
查看文件的详细信息
import os
import stat
import time
"""
sta state 状态、情形
st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
"""
# 获得文件对象
file = os.stat("/Users/apple/Desktop/HELP_1 2/")
"""
得到文件的上一次的修改时间,结果是毫秒格式,机器看得懂,人看不懂。
剩下的方法自己有兴趣可以都试一下
"""
timeMachine = file.st_mtime
# 把时间转为人能看得懂的格式
timePerson = time.localtime(int(file.st_mtime))
timePerson = time.strftime("%Y-%m-%d %H:%M:%S", timePerson)
# 输出修改时间 2021-01-15 10:02:10
print(timePerson)
查看目录的结构
import os
"""
walk 随处走走 我们随处走走探索世界结构 系统随处走走是探索文件夹结构
三个参数:
topdown --可选,为True,则优先遍历 top 目录,否则优先遍历 top 的子目录。默认值是True
onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。
followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录
如果为 False,则优先遍历 top 的子目录。默认值是False
返回值:三元数组:(root,dirs,files)
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的文件夹的名字
files 同样是 list , 内容是该文件夹中所有文件的名字
"""
# 获得文件夹的结构
info = os.walk('/Users/apple/Desktop/HELP_1')
# 得到文件结构,输出所有文件、文件夹的路径
for root, dirs, files in info:
# 循环
for i in files:
# 输出文件路径
print('文件路径:' + os.path.join(root, i))
# 循环
for i in dirs:
# 输出文件夹路径
print('文件夹路径:' + os.path.join(root, i))
查看文件的绝对路径、相对路径、文件名称、上层文件夹的路径
import os
"""
abs absolute 绝对
base 基础
dir directory 文件夹
real 实际的
rel relative 相对
"""
# 输出文件的绝对路径
print(os.path.abspath('nihao.txt'))
# 输出文件的文件名
print(os.path.basename('nihao.txt'))
# 输出文件上层文件夹的路径
print(os.path.dirname('/Users/apple/PycharmProjects/pythonTest/tool_Ives/nihao.txt'))
# 输出路径的真实路径,也就是绝对路径
print(os.path.realpath('nihao.txt'))
# 输出'nihao.txt'相对'当前工作目录'的路径 PS:os.getcwd()获得当前工作目录
print(os.path.relpath('nihao.txt', os.getcwd()))
查看路径是否存在
import os
"""
exists 存在
"""
# 如果路径(文件、文件夹)存在则返回True,不存在返回False
print(os.path.exists('/Users/apple/PycharmProjects/pythonTest/tool_Ives/nihao.txt'))
查看路径是否为绝对路径、是否为文件、是否为目录
import os
"""
abs absolute 绝对
dir directory 文件夹
file 文件
"""
# 判断路径是否为绝对路径,返回True、False
print(os.path.isabs('nihao.txt'))
# 判断路径是否为文件夹,返回True、False
print(os.path.isdir('nihao.txt'))
# 判断路径是否为文件,返回True、False
print(os.path.isfile('nihao.txt'))
查看路径的最近访问时间、最近修改时间、创建时间、大小
import os
"""
a access 使用
c create 创建
m modify 修改
"""
"""
把毫秒格式的时间改为年月日时分秒的格式
import time
# 获得文件最近修改的时间,毫秒格式,人类看不懂
timeMachine = os.path.getmtime('nihao.txt')
# 把时间转为年月日的格式,人类能看懂的格式
timePerson = time.localtime(int(timeMachine))
timePerson = time.strftime("%Y-%m-%d %H:%M:%S", timePerson)
# 输出时间
print(timePerson)
"""
# 输出路径最近访问时间(毫秒格式)
print(os.path.getatime('nihao.txt'))
# 输出路径创建时间(毫秒格式)
print(os.path.getctime('nihao.txt'))
# 输出路径最近修改时间(毫秒格式)
print(os.path.getmtime('nihao.txt'))
# 输出路径的大小(单位:字节)
print(os.path.getsize('nihao.txt'))
拼接目录和文件名(无视操作系统的差异)
最常见的两种操作系统:windows和mac。它们的目录分隔符是不一致的。
Windows
C:\some_folder\some_file.txt
mac
/some_folder/some_file.txt
例如:我用的是mac系统,我想在文件夹A下创建一个文件夹B
import os
os.mkdir('A/B')
这行代码放到windows系统运行,必然报错,因为windows的目录分隔符是‘\’,它不认识‘/’,所以为了跨平台的兼容性,我们可以这样写。
import os
# 根据不得的操作系统得到不同的目录分隔符,拼接路径
dir=os.path.join('A', 'B')
# 创建文件夹
os.mkdir(path)
查看两个路径是否相等
import os
"""
same 相同
这里判断两个路径是否相同的依据:两个路径名是否引用相同的实际文件
两个文件(就算是复制的),也不会相等。相等的前提是只有一个文件,两个引用,例如:相对路径和绝对路径
"""
# 输出两个文件是否为同一个文件 左边是相对路径 右边是绝对路径 但两者指向的都是同一个文件
print(os.path.samefile("nihao.txt", '/Users/apple/PycharmProjects/pythonTest/tool_Ives/nihao.txt'))
得到路径的文件夹和文件名
import os
"""
split 分割
把路径分割成 dirname 和 basename,返回一个元组
"""
dirname, basename = os.path.split('/Users/apple/PycharmProjects/pythonTest/tool_Ives/nihao.txt')
# 输出文件夹名称
print(dirname)
# 输出文件名称
print(basename)
得到路径的绝对文件名和后缀
import os
"""
split 分割
分割路径,返回路径名和文件扩展名(后缀)
"""
name, suffix = os.path.splitext('/Users/apple/PycharmProjects/pythonTest/tool_Ives/nihao.txt')
# 输出路径名
print(name)
# 输出文件后缀
print(suffix)
执行终端指令
import os
"""
system 系统
执行shell指令 mac的终端 windows的cmd
"""
# ls是shell指令,list的意思。终端执行ls:查看当前文件夹的内容
os.system('ls')