文件系统功能:os模块内置属性方法
1、目录相关
chdir():改变工作目录
chroot(): 设定当前进程的根目录
listdir(): 列出指定目录下的所有文件名
mkdir(): 创建指定目录
makedirs(): 创建多级目录
getcwd():获取当前工作目录
rmdir():删除目录
removedirs(): 删除多级目录
用法示例:
In [1]: import os
In [2]: os.
Display all 207 possibilities? (y or n)
os.EX_CANTCREAT os.O_DSYNC os.WCONTINUED os.confstr_names os.fdopen os.getsid os.pardir os.setpgid os.sys
os.EX_CONFIG os.O_EXCL os.WCOREDUMP os.ctermid os.fork os.getuid os.path os.setpgrp os.sysconf
os.EX_DATAERR os.O_LARGEFILE os.WEXITSTATUS os.curdir os.forkpty os.initgroups os.pathconf os.setregid os.sysconf_names
os.EX_IOERR os.O_NDELAY os.WIFCONTINUED os.defpath os.fpathconf os.isatty os.pathconf_names os.setresgid os.system
os.EX_NOHOST os.O_NOATIME os.WIFEXITED os.devnull os.fstat os.kill os.pathsep os.setresuid os.tcgetpgrp
os.EX_NOINPUT os.O_NOCTTY os.WIFSIGNALED os.dup os.fstatvfs os.killpg os.pipe os.setreuid os.tcsetpgrp
os.EX_NOPERM os.O_NOFOLLOW os.WIFSTOPPED os.dup2 os.fsync os.lchown os.popen os.setsid os.tempnam
os.EX_NOUSER os.O_NONBLOCK os.WNOHANG os.environ os.ftruncate os.linesep os.popen2 os.setuid os.times
os.EX_OK os.O_RDONLY os.WSTOPSIG os.errno os.getcwd os.link os.popen3 os.spawnl os.tmpfile
os.EX_OSERR os.O_RDWR os.WTERMSIG os.error os.getcwdu os.listdir os.popen4 os.spawnle os.tmpnam
os.EX_OSFILE os.O_RSYNC os.WUNTRACED os.execl os.getegid os.lseek os.putenv os.spawnlp os.ttyname
os.EX_PROTOCOL os.O_SYNC os.W_OK os.execle os.getenv os.lstat os.read os.spawnlpe os.umask
os.EX_SOFTWARE os.O_TRUNC os.X_OK os.execlp os.geteuid os.major os.readlink os.spawnv os.uname
os.EX_TEMPFAIL os.O_WRONLY os.abort os.execlpe os.getgid os.makedev os.remove os.spawnve os.unlink
os.EX_UNAVAILABLE os.P_NOWAIT os.access os.execv os.getgroups os.makedirs os.removedirs os.spawnvp os.unsetenv
os.EX_USAGE os.P_NOWAITO os.altsep os.execve os.getloadavg os.minor os.rename os.spawnvpe os.urandom
os.F_OK os.P_WAIT os.chdir os.execvp os.getlogin os.mkdir os.renames os.stat os.utime
os.NGROUPS_MAX os.R_OK os.chmod os.execvpe os.getpgid os.mkfifo os.rmdir os.stat_float_times os.wait
os.O_APPEND os.SEEK_CUR os.chown os.extsep os.getpgrp os.mknod os.sep os.stat_result os.wait3
os.O_ASYNC os.SEEK_END os.chroot os.fchdir os.getpid os.name os.setegid os.statvfs os.wait4
os.O_CREAT os.SEEK_SET os.close os.fchmod os.getppid os.nice os.seteuid os.statvfs_result os.waitpid
os.O_DIRECT os.TMP_MAX os.closerange os.fchown os.getresgid os.open os.setgid os.strerror os.walk
os.O_DIRECTORY os.UserDict os.confstr os.fdatasync os.getresuid os.openpty os.setgroups os.symlink os.write
In [2]: os.mkdir('/tmp/0526') #创建目录
In [3]: os.getcwd() #获取当前路径
Out[3]: '/root'
In [4]: os.chdir('/tmp') #改变当前路径为/tmp
In [5]: os.getcwd()
Out[5]: '/tmp'
In [7]: os.makedirs('x/y/z') #递归创建目录
In [8]: os.rmdir('/tmp/0526') #删除目录
2、文件相关
mkfifo():创建命令管道
mknod(): 创建设备文件
remove():删除文件
unlink():删除链接文件
rename(): 重命名
stat(): 返回文件状态信息
symlink():创建连接
utime(): 更新时间戳
tmpfile(): 创建并打开(w+b)一个新的临时文件
walk():目录树生成器
用法示例:
In [1]: import os
In [2]: os.getcwd()
Out[2]: '/root'
In [3]: os.chdir('/field/') #切换目录到/field/下
In [4]: os.getcwd()
Out[4]: '/field'
In [6]: os.listdir('/field/') #列出/field/目录下的文件
Out[6]: ['passwd', 'tmp.txt', 'test.unl','test0526.txt']
In [7]: os.remove('/field/tmp.txt') #删除/field/目录下的tmp.txt文件
In [8]: os.listdir('/field/')
Out[8]: ['passwd', 'test.unl','test0526.txt']
In [9]: os.stat('/field/test.unl') #查询/field/目录下的test.unl文件详细信息
Out[9]: posix.stat_result(st_mode=33188,st_ino=89994, st_dev=2050L, st_nlink=1, st_uid=0, st_gid=0, st_size=25,st_atime=1527341763, st_mtime=1527341763, st_ctime=1527341779)
In [10]:os.rename('/field/test.unl','/field/newtest.unl') #重命名test.unl为newtest.unl
In [11]: os.listdir('/field/')
Out[11]: ['passwd', 'newtest.unl','test0526.txt']
In [12]: os.symlink('newtest.unl','test.unl') #为newtest.unl创建软链接test.unl
[root@test field]# ll
总用量 12
-rw-r--r-- 1 root root 25 5月 26 21:36 newtest.unl
-rw-r--r-- 1 root root 1966 5月 26 21:36 passwd
-rw-r--r-- 1 root root 70 5月 26 21:36 test0526.txt
lrwxrwxrwx 1 root root 11 5月 26 21:42 test.unl -> newtest.unl
In [13]: os.listdir('/field/')
Out[13]: ['passwd', 'test.unl','newtest.unl', 'test0526.txt']
In [14]: os.unlink('test.unl') #删除链接test.unl
In [15]: os.listdir('/field/')
Out[15]: ['passwd', 'newtest.unl','test0526.txt']
[root@test field]# ll
总用量 12
-rw-r--r-- 1 root root 25 5月 26 21:36 newtest.unl
-rw-r--r-- 1 root root 1966 5月 26 21:36 passwd
-rw-r--r-- 1 root root 70 5月 26 21:36 test0526.txt
In [16]: g1 = os.walk('/field/') #生成一个目录树
In [17]: g1.next()
Out[17]: ('/field/', ['0526', 'testdir'],['passwd', 'newtest.unl', 'test0526.txt'])
3、访问权限相关
access(path, mode): 查看是否具备访问权限
chmod(path, mode): 修改权限
chown(path, uid, gid):修改属主,属组
umask(): 设置默认权限模式、
用法示例:
In [22]: os.access('passwd',0) #查看root是否有passwd访问权限
Out[22]: True
In [23]: os.access('passwd',500) #查看500用户是否有passwd访问权限
Out[23]: False
In [24]: os.chmod('passwd',0755) #修改passwd权限为755
In [25]: os.chown('passwd',500,500) #修改文件属主属组为500
[root@test field]# ll passwd
-rwxr-xr-x 1 root root 1966 5月 26 21:36 passwd
[root@test field]# id field
uid=500(field) gid=500(field) 组=500(field)
[root@test field]# ll passwd
-rwxr-xr-x 1 field field 1966 5月 26 21:36 passwd
4、文件描述符相关
open(filename, flag [, mode=0777]) -> fd:底层操作系统打开一个文件,库中的函数打开一个文件
read():较底层IO的读操作
write():较底层IO的写操作
5、设备文件相关
makedev(major, minor): 创建设备文件
major(device):从指定设备获取主设备号,device设备号
minor(device):从指定设备获取从设备号
用法示例
In [1]: os.major(61)
Out[1]: 0
In [2]: os.major(610)
Out[2]: 2
In [3]: os.minor(610)
Out[3]: 98
In [4]: os.minor(61)
Out[4]: 61Out[30]: 2
6、os.path文件路径相关属性方法
basename(): 路径基名
dirname(): 路径目录名
join(): 构建绝对路径
split(): 返回dirname(),basename()元组
splitext(): 返回(filename,extension)元组
用法示例
例1:常见方法使用
In [1]: import os.path
In [2]: os.path.
os.path.abspath os.path.ismount
os.path.altsep os.path.join
os.path.basename os.path.lexists
os.path.commonprefix os.path.normcase
os.path.curdir os.path.normpath
os.path.defpath os.path.os
os.path.devnull os.path.pardir
os.path.dirname os.path.pathsep
os.path.exists os.path.realpath
os.path.expanduser os.path.relpath
os.path.expandvars os.path.samefile
os.path.extsep os.path.sameopenfile
os.path.genericpath os.path.samestat
os.path.getatime os.path.sep
os.path.getctime os.path.split
os.path.getmtime os.path.splitdrive
os.path.getsize os.path.splitext
os.path.isabs os.path.stat
os.path.isdir os.path.supports_unicode_filenames
os.path.isfile os.path.walk
os.path.islink os.path.warnings
In [2]:os.path.dirname('/etc/sysconfig/network-scripts') #查看路径目录名
Out[2]: '/etc/sysconfig'
In [3]:os.path.basename('/etc/sysconfig/network-scripts') #查看路径基名
Out[3]: 'network-scripts'
In [4]: dir1 =os.path.dirname('/etc/sysconfig/network-scripts')
In [5]: file1 =os.path.basename('/etc/sysconfig/network-scripts')
In [6]: print dir1, file1
/etc/sysconfig network-scripts
In [7]: os.path.join(dir1,file1)
#使用os.path.join(dir1,file1)联合路径目录名和基名,构建绝对路径
Out[7]: '/etc/sysconfig/network-scripts'
In [8]: os.listdir('/field/')
Out[8]: ['0526', 'passwd', 'testdir','newtest.unl', 'test0526.txt']
例2:使用绝对路径打印/field/下文件
In [9]: for filename inos.listdir('/field/'):
...: printos.path.join('/field',filename)
...:
/field/0526
/field/passwd
/field/testdir
/field/newtest.unl
/field/test0526.txt
In [10]: os.path.split('/field/passwd')
Out[10]: ('/field', 'passwd')
7、文件信息相关
getatime():最近一次访问时间
getctime():文件状态最后一次被改变的时间
getmtime():文件内容最后一次被修改的时间
getsize(): 返回文件的大小
8、文件查询相关
exists(): 判断指定文件是否存在
isabs(): 判断指定的路径是否为绝对路径
isdir(): 是否为目录
isfile(): 是否为文件
islink(): 是否符号链接
ismount(): 是否为挂载点
samefile(): 两个路径是否指向了同一个文件
应用实例
判断文件是否存在,存在则打开,不存在则新建,
让用户通过键盘反复输入多行数据,追加保存至此文件中,并使用“q”和“quit”控制输入
[root@test field]# ls
0526 newtest.unl passwd test0526.txt testdir
[root@test field]# vim test.py
#!/usr/bin/python27
#
import os
import os.path
filename = '/field/tmp.txt'
if os.path.exists(filename):
f1 = open(filename,'a+')
else:
f1 = open(filename,'w+')
while True:
line = raw_input('Please say something>')
if line == 'q' or line == 'quit':
break
f1.write(line+'\n')
f1.close()
[root@test field]# ./test.py
Please say something>hello world!
Please say something>how are you ?
Please say something>how old are you ?
Please say something>i am field.
Please say something>quit
[root@test field]# cat tmp.txt
hello world!
how are you ?
how old are you ?
i am field.
[root@test field]# ./test.py
Please say something>yes sir!
Please say something>thanks!
Please say something>q
[root@test field]# cat tmp.txt
hello world!
how are you ?
how old are you ?
i am field.
yes sir!
thanks!