1) access()方法用于判断文件是否“存在”、“可读”、“可写”、“可执行”,如果是则返回 True ,否则返回 False
os.access(path, mode)
path :这是对于存在或任何访问进行测试的路径
mode : F_OK值是用于测试路径的存在,或者它可以是在包含或一种或多种R_OK,W_OK,X_OK测试权限。
os.F_OK: 值作为模式,测试来路径是否存在
os.R_OK: 值作为模式,测试来路径是否可读
os.W_OK 值作为模式,测试来路径是否可写
os.X_OK 值作为模式,测试来路径是否可执行
>>> import os r = os.access('./requirement.txt', os.F_OK) >>> print(r) True >>> r = os.access('./requirement.txt', os.R_OK) >>> print(r) True >>> r = os.access('./requirement.txt', os.W_OK) >>> print(r) True >>> r = os.access('./requirement.txt', os.X_OK) >>> print(r) False |
2) chdir()方法改变当前的工作目录到指定路径。它返回对象是None
os.chdir(path)
path -- 这是被用来改变到一个新的位置的完整路径目录。
如果指定路径未找到它会抛出 FileNotFoundError 错误异常。
>>> os.chdir('./codes/')
>>> r = os.getcwd()
>>> print(r)
/home/book/codes
3) getcwd()方法返回当前工作目录
4) listdir()方法返回一个包含由路径给出的目录条目名称的列表。该列表在任意顺序。它不包括特殊项目“.”和“..”,即使它们存在在目录中。但是仅限于本层
>>> listdi = os.listdir('./') #获取当前路径下的所有文件和目录
>>> print(listdi)
['encryption1.py', 'exam', 'input.txt', 'encryption','databsetest.py', 'testbase64.py', 'bytestest.py', 'key.py', 'testarray.py']
>>> listdi = os.listdir('../')
#获得上一级,注意能查到以.开头的文件,但是仅限于本层
>>> print(listdi)
['.bash_history', '.config', '.bashrc', 'Templates','.presage', 'Pictures', 'codes', '.gnupg', '.bash_logout', '.dbus', '.java','.local', 'Public', 'Downloads', '.Xauthority', 'aliyun-python-sdk-kms','.mysql_history', 'sublime-text-imfix', '.xsession-errors.old', 'Desktop','.dmrc', '.xsession-errors', 'Music', '.cache', '.ICEauthority', 'Documents','learngit', '.sudo_as_admin_successful', '.sogouinput', 'requirement.txt','.PyCharm2017.3', 'projects', 'aliyun-python-sdk-afs', '.mozilla', 'Videos','.xinputrc', '.python_history', 'examples.desktop', '.gconf', '.profile']
5) mkdir() 方法使用一个数字模式mode创建一个名为 path 的路径。 默认模式为0777(八进制)。在一些系统上,模式将被忽略。
>>> os.mkdir('异步') #创建目录
>>> os.listdir('./')
['encryption1.py', 'exam', 'input.txt', 'encryption','databsetest.py', 'testbase64.py', 'bytestest.py', 'key.py', '异步', 'testarray.py']
>>> os.mkdir('异步.py') #创建目录不是文件
>>> os.listdir('./')
['异步.py', 'encryption1.py', 'exam','input.txt', 'encryption', 'databsetest.py', 'testbase64.py', 'bytestest.py','key.py', '异步', 'testarray.py']
6) chmod() 方法改变路径的模式为数字模式。
模式(mode)可采取以下值中的一个或按位运算组合:
stat.S_ISUID: 在执行时设置用户ID
stat.S_ISGID: 在执行时设置组ID
stat.S_ENFMT: 记录锁定执行
stat.S_ISVTX: 执行后保存文本镜像
stat.S_IREAD: 由所有者读取
stat.S_IWRITE: 由所有者写入
stat.S_IEXEC: 由所有者执行
stat.S_IRWXU: 由所有者读取、写入和执行
stat.S_IRUSR: 由所有者读取
stat.S_IWUSR: 由所有者写入
stat.S_IXUSR: 由所有者执行
stat.S_IRWXG: 由组写读、写和执行
stat.S_IRGRP: 由组读取
stat.S_IWGRP: 由组写入
stat.S_IXGRP: 由组执行
stat.S_IRWXO: 由其他人写读、写和执行
stat.S_IROTH: 由其他人读取
stat.S_IWOTH: 由其他人写入
stat.S_IXOTH: 由其他人执行
>>> import stat
>>> os.chmod('./mkfile.py',stat.S_IRWXU)
注意:如果文件有可执行权限则文件的头一句必须是下面一句话
#! /usr/bin/env python3
7) open()方法根据标记(flags),并根据设置各种标志在指定模式下打开文件
os.open(file, flags[, mode]);
file -- 要打开的文件名
flags -- 以下常量是标志 flags 选项。可以用位或操作符相结合。但是其中有些是不是适用于所有平台。
os.O_RDONLY: 只读打开
os.O_WRONLY: 只写打开
os.O_RDWR : 打开读写
os.O_NONBLOCK: 不阻塞打开
os.O_APPEND: 每个写入附加
os.O_CREAT: 如果不存在,创建文件
os.O_FSYNC : 同步写入
#!/usr/bin/python3
import os
# Open a file
fd = os.open( "foo.txt",os.O_RDWR|os.O_CREAT )
# Write one string
line="this is test"
# string needs to be converted byte object
b=str.encode(line)
os.write(fd, b)
# Close opened file
os.close( fd)
print ("Closed the file successfully!!")
8) os.read(fd, n)
从文件描述符 fd 读取最多到 n 个字节。返回包含读取字节的字符串。如果 fd 引用已到达文件的末尾,则返回一个空字符串
注:此函数适用于低级别的I/O,以及必须由 os.open() 或 pipe() 返回适用于一个文件描述符。若要读取“文件对象”的返回值,这是由内置open()函数或任何通过 popen()或 fdopen(),或 sys.stdin,使用它的 read()或 readline()方法。
9) remove()方法删除文件的路径。如果路径是一个目录,将引发 OSError 异常。
10) rmdir()方法命令删除目录路径。它只有在当该目录是空时工作,否则引发 OSError 异常。
11) walk()方法通过遍历树,无论是自上而下还是自下而上生成的目录树中的文件名
os.walk(top[, topdown=True[, onerror=None[,followlinks=False]]])
top --将要遍历的目录,得到3元组,即(dirpath, dirnames, filenames)
topdown -- 如果可选参数 topdown 的值是Ture或未指定,则目录从自上而下的扫描。 如果 topdown 设置为False,目录从自下而 上的扫描。
onerror -- 这可能会显示错误继续遍历文件,或引发异常中止遍历。
followlinks -- 这可访问目录指向符号链接,如果设置为true。
import os
import os
for root, dirs, files in os.walk("../codes",topdown=False): #深度遍历 自上而下
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
for root, dirs, files in os.walk("../codes",topdown=True): # 深度遍历 自下而上
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
12)abspath(),返回绝对路径
os.path.abspath(path)
>>> import os
>>> os.path.abspath('./')
'/home/book'
>>> os.path.abspath('../')
'/home'
13)split(path) 查看路径的文件夹部分和文件名部分
os.path.split(path):将路径分解为(文件夹,文件名),返回的是元组类型
>>> import os
>>> os.path.split('./foo.txt')
('.', 'foo.txt')
>>>os.path.split('/home/book/codes/foo.txt')
('/home/book/codes', 'foo.txt')
>>> os.path.split('/home/book/codes/')
('/home/book/codes', '')
>>> os.path.split('/home/book/codes')
('/home/book', 'codes')
os.path.join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除。
>>> os.path.join('/home/book/codes','foo.txt')
'/home/book/codes/foo.txt'
>>>os.path.join('/home/book/codes/','foo.txt')
'/home/book/codes/foo.txt'
>>>os.path.join('/home/book/codes/foo.txt', '/home/book/codes/doo.txt')
'/home/book/codes/doo.txt' #若其中有绝对路径,则之前的path将被删除