- 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 |
- chdir()方法改变当前的工作目录到指定路径。它返回对象是None
os.chdir(path)
path -- 这是被用来改变到一个新的位置的完整路径目录。
如果指定路径未找到它会抛出 FileNotFoundError 错误异常。
>>> os.chdir('./codes/')
>>> r = os.getcwd()
>>> print(r)
/home/book/codes
- getcwd()方法返回当前工作目录
- 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']
- 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']
- 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
- 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!!")
- os.read(fd, n)
从文件描述符 fd 读取最多到 n 个字节。返回包含读取字节的字符串。如果 fd 引用已到达文件的末尾,则返回一个空字符串
注:此函数适用于低级别的I/O,以及必须由 os.open() 或 pipe() 返回适用于一个文件描述符。若要读取“文件对象”的返回值,这是由内置open()函数或任何通过 popen()或 fdopen(),或 sys.stdin,使用它的 read()或 readline()方法。
- remove()方法删除文件的路径。如果路径是一个目录,将引发 OSError 异常。
- rmdir()方法命令删除目录路径。它只有在当该目录是空时工作,否则引发 OSError 异常。
- 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将被删除
14)os.path.dirname(path) 返回path中的文件夹部分,结果不包含'\'
>>> os.path.dirname('/home/book/codes/foo.txt')
'/home/book/codes'
>>> os.path.dirname('/home/book/codes/')
'/home/book/codes'
>>> os.path.dirname('/home/book/codes')
'/home/book'
注意:以上三个例子均是在同一个文件夹下,返回结果,从后面数第一个/之前认为是文件夹部分
15)os.path.basename(path):返回path中的文件名;和上面一个例子刚好相反
>>> os.path.basename('/home/book/codes/foo.txt')
'foo.txt'
>>> os.path.basename('/home/book/codes/')
''
>>> os.path.basename('/home/book/codes ')
'codes'
16)查看文件访问时间
os.path.getmtime(path) 文件或文件夹的最后修改时间,从新纪元到访问时的秒数
>>> os.path.getmtime('./foo.txt')
1522209862.2667065
os.path.getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数
>>> os.path.getatime('./foo.txt')
1522302980.2197397
os.path.getctime(path):文件或文件夹的创建时间,从新纪元到访问时的秒数。
>>> os.path.getctime('./foo.txt')
1522209862.2667065
17) os.path.getsize(path):文件或文件夹的大小,若是文件夹返回0。
>>> os.path.getsize('./foo.txt') 补充:foo.txt文件中的内容是 ’this 中字’
11(字节,一个中文是三个字节 空格也是一个字节)
18) os.path.exists(path):文件或文件夹是否存在,返回True 或 False。
>>> os.path.exists('./foo.txt')
True
>>> os.path.exists('/home/book/project')
False