pythonos文件目录方法_PythonOS 文件目录方法
os 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:
osos是用来调用当前操作系统内置的程序或函数的,而不需要对当前操作系统内置的程序或函数进行再定义
序号方法及描述
64
os.path 模块
获取文件的属性信息。
os.path 模块主要用于获取文件的属性。
以下是 os.path 模块的几种常用方法:
方法说明
os.path.abspath(path)返回绝对路径
os.path.basename(path)返回文件名
os.path.commonprefix(list)返回list(多个路径)中,所有path共有的最长的路径
os.path.dirname(path)返回文件路径
os.path.exists(path)路径存在则返回True,路径损坏返回False
os.path.lexists路径存在则返回True,路径损坏也返回True
os.path.expanduser(path)把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path)根据环境变量的值替换path中包含的"$name"和"${name}"
os.path.getatime(path)返回最近访问时间(浮点型秒数)
os.path.getmtime(path)返回最近文件修改时间
os.path.getctime(path)返回文件 path 创建时间
os.path.getsize(path)返回文件大小,如果文件不存在就返回错误
os.path.isabs(path)判断是否为绝对路径
os.path.isfile(path)判断路径是否为文件
os.path.isdir(path)判断路径是否为目录
os.path.islink(path)判断路径是否为链接
os.path.ismount(path)判断路径是否为挂载点
os.path.join(path1[, path2[, ...]])把目录和文件名合成一个路径
os.path.normcase(path)转换path的大小写和斜杠
os.path.normpath(path)规范path字符串形式
os.path.realpath(path)返回path的真实路径
os.path.relpath(path[, start])从start开始计算相对路径
os.path.samefile(path1, path2)判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2)判断fp1和fp2是否指向同一文件
os.path.samestat(stat1, stat2)判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path)把路径分割成 dirname 和 basename,返回一个元组
os.path.splitdrive(path)一般用在 windows 下,返回驱动器名和路径组成的元组
os.path.splitext(path)分割路径,返回路径名和文件扩展名的元组
os.path.splitunc(path)把路径分割为加载点与文件
os.path.walk(path, visit, arg)遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数
os.path.supports_unicode_filenames设置是否支持unicode路径名
实例
以下实例演示了 os.path 相关方法的使用:
实例
#!/usr/bin/python3
import os
print( os.path.basename('/root/runoob.txt') ) # 返回文件名
print( os.path.dirname('/root/runoob.txt') ) # 返回目录路径
print( os.path.split('/root/runoob.txt') ) # 分割文件名与路径
print( os.path.join('root','test','runoob.txt') ) # 将目录和文件名合成一个路径
执行以上程序输出结果为:
runoob.txt
/root
('/root', 'runoob.txt')
root/test/runoob.txt
以下实例输出文件的相关信息。
实例
import os
import time
file='/root/runoob.txt' # 文件路径
print( os.path.getatime(file) ) # 输出最近访问时间
print( os.path.getctime(file) ) # 输出文件创建时间
print( os.path.getmtime(file) ) # 输出最近修改时间
print( time.gmtime(os.path.getmtime(file)) ) # 以struct_time形式输出最近修改时间
print( os.path.getsize(file) ) # 输出文件大小(字节为单位)
print( os.path.abspath(file) ) # 输出绝对路径
print( os.path.normpath(file) ) # 规范path字符串形式
执行以上程序输出结果为:
1539052805.5735736
1539052805.5775735
1539052805.5735736
time.struct_time(tm_year=2018, tm_mon=10, tm_mday=9, tm_hour=2, tm_min=40, tm_sec=5, tm_wday=1, tm_yday=282, tm_isdst=0)
7
/root/runoob.txt
/root/runoob.txt
63
os.write(fd, str)
写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
import os, sys
# 打开文件
fd = os.open("f1.txt",os.O_RDWR|os.O_CREAT)
# 写入字符串
str = "This is runoob.com site"
ret = os.write(fd,bytes(str, 'UTF-8'))
# 输入返回值
print ("写入的位数为: ")
print (ret)
print ("写入成功")
# 关闭文件
os.close(fd)
print ("关闭文件成功!!")
执行以上程序输出结果为:
写入的位数为:
23
写入成功
关闭文件成功!!
62
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
输出在文件夹中的文件名通过在树中游走,向上或者向下。
os.walk() 方法可以创建一个生成器,用以生成所要查找的目录及其子目录下的所有文件。
os.walk() 方法用于通过在目录树中游走输出在目录中的文件名,向上或者向下。
os.walk() 方法是一个简单易用的文件、目录遍历器,可以帮助我们高效的处理文件、目录方面的事情。
在Unix,Windows中有效。
top -- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。
topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。
onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。
followlinks -- 设置为 true,则通过软链接访问目录。
import os
for root, dirs, files in os.walk(".", topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
执行以上程序输出结果为:
./.bash_logout
./amrood.tar.gz
./.emacs
./httpd.conf
./www.tar.gz
./mysql.tar.gz
./test.py
./.bashrc
./.bash_history
./.bash_profile
./tmp
./tmp/test.py
61
os.utime(path, times)
返回指定的path文件的访问和修改的时间。
path -- 文件路径
times -- 如果时间是 None, 则文件的访问和修改设为当前时间 。 否则, 时间是一个 2-tuple数字, (atime, mtime) 用来分别作为访问和修改的时间。
import os, sys
# 显示文件的 stat 信息
stinfo = os.stat('a2.py')
print (stinfo)
# 使用 os.stat 来接收文件的访问和修改时间
print ("a2.py 的访问时间: %s" %stinfo.st_atime)
print ("a2.py 的修改时间: %s" %stinfo.st_mtime)
# 修改访问和修改时间
os.utime("a2.py",(1330712280, 1330712292))
print ("done!!")
执行以上程序输出结果为:
posix.stat_result(st_mode=33188, st_ino=3940649674337682L, st_dev=277923425L, st
_nlink=1, st_uid=400, st_gid=401, st_size=335L, st_atime=1330498070, st_mtime=13
30498074, st_ctime=1330498065)
a2.py 的访问时间: 1330498070
a2.py 的修改时间: 1330498074
done!!
60
os.unlink(path)
删除文件路径
import os, sys
# 列出目录
print ("目录为: %s" %os.listdir(os.getcwd()))
os.unlink("aa.txt")
# 删除后的目录
print ("删除后的目录为 : %s" %os.listdir(os.getcwd()))
执行以上程序输出结果为:
目录为:
[ 'a1.txt','aa.txt','resume.doc']
删除后的目录为 :
[ 'a1.txt','resume.doc' ]
50
os.stat(path)
获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
path -- 指定路径
返回值
stat 结构:
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)是创建时间(详细信息参见平台的文档)。
import os, sys
# 显示文件 "a2.py" 信息
statinfo = os.stat('a2.py')
print (statinfo)
执行以上程序输出结果为:
posix.stat_result(st_mode=33188, st_ino=3940649674337682L, st_dev=277923425L, st
_nlink=1, st_uid=400, st_gid=401, st_size=335L, st_atime=1330498089, st_mtime=13
30498089, st_ctime=1330498089)
49
os.rmdir(path)
删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
import os, sys
# 列出目录
print ("目录为: %s"%os.listdir(os.getcwd()))
# 删除路径
os.rmdir("mydir")
# 列出重命名后的目录
print ("目录为: %s" %os.listdir(os.getcwd()))
执行以上程序输出结果为:
目录为:
[ 'a1.txt','resume.doc','a3.py','mydir' ]
目录为:
[ 'a1.txt','resume.doc','a3.py' ]
48
os.renames(old, new)
old -- 要重命名的目录
new --文件或目录的新名字。甚至可以是包含在目录中的文件,或者完整的目录树。
返回值
递归地对目录进行更名,也可以对文件进行更名。
import os, sys
print ("当前目录为: %s" %os.getcwd())
# 列出目录
print ("目录为: %s"%os.listdir(os.getcwd()))
# 重命名 "aa1.txt"
os.renames("aa1.txt","newdir/aanew.txt")
print ("重命名成功。")
# 列出重命名的文件 "aa1.txt"
print ("目录为: %s" %os.listdir(os.getcwd()))
执行以上程序输出结果为:
当前目录为: /tmp
目录为:
[ 'a1.txt','resume.doc','a3.py','aa1.txt','Administrator','newdir','amrood.admin' ]
重命名成功。
目录为:
[ 'a1.txt','resume.doc','a3.py','Administrator','newdir','amrood.admin' ]
47
os.rename(src, dst) 给目录改名字
重命名文件或目录,从 src 到 dst
import os, sys
# 列出目录
print ("目录为: %s"%os.listdir(os.getcwd()))
# 重命名
os.rename("test","test2")
print ("重命名成功。")
# 列出重命名后的目录
print ("目录为: %s" %os.listdir(os.getcwd()))
执行以上程序输出结果为:
目录为:
[ 'a1.txt','resume.doc','a3.py','test' ]
重命名成功。
[ 'a1.txt','resume.doc','a3.py','test2' ]
主要动机是懒得一个一个修改哔哩哔哩手机客户端缓存下来的 *.blv 文件为 *.flv 文件,至于合并就暂不涉及了
以刚刚网络首播的《你的名字。》为例,文件夹下一共17个blv文件,以及一些其他类型的文件:
# 搜寻单层目录下的blv文件并将其转换为flv文件
# 用于哔哩哔哩缓存视频blv格式转换后合并(本例程只是做个小小的扩展名转换)
import os
import os.path
ext_from = '.blv'
ext_to = '.flv'
read_file_dir = input(r'请输入要修改文件扩展名的路径:')
files = os.listdir(read_file_dir) # 列出当前目录下所有的文件
for filename in files:
portion = os.path.splitext(filename) # 分离文件名字和后缀
if portion[1] ==ext_from: #检测扩展名
newname = portion[0]+ext_to #改新的新扩展名
os.chdir(read_file_dir)
os.rename(filename,newname)
print(os.path.basename(filename)+' -> '+ os.path.basename(newname))
46
os.removedirs(path)
递归删除目录。
import os, sys
# 列出目录
print ("目录为: %s" %os.listdir(os.getcwd()))
# 移除
os.removedirs("/test")
# 列出移除后的目录
print ("移除后目录为:" %os.listdir(os.getcwd()))
执行以上程序输出结果为:
目录为:
[ 'a1.txt','resume.doc','a3.py','test' ]
移除后目录为:
[ 'a1.txt','resume.doc','a3.py' ]
45
os.remove(path)
删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
# 列出目录
print ("目录为: %s" %os.listdir(os.getcwd()))
# 移除
os.remove("aa.txt")
# 移除后列出目录
print ("移除后 : %s" %os.listdir(os.getcwd()))
执行以上程序输出结果为:
目录为:
[ 'a1.txt','aa.txt','resume.doc' ]
移除后 :
[ 'a1.txt','resume.doc' ]
43
os.read(fd, n)
import os, sys
# 打开文件
fd = os.open("f1.txt",os.O_RDWR)
# 读取文本
ret = os.read(fd,12)
print (ret)
# 关闭文件
os.close(fd)
print ("关闭文件成功!!")
从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
38
os.open(file, flags[, mode])
打开一个文件,并且设置需要的打开选项,mode参数是可选的
file -- 要打开的文件
flags -- 该参数可以是以下选项,多个使用 "|" 隔开:
os.O_RDONLY: 以只读的方式打开
os.O_WRONLY: 以只写的方式打开
os.O_RDWR : 以读写的方式打开
os.O_NONBLOCK: 打开时不阻塞
os.O_APPEND: 以追加的方式打开
os.O_CREAT: 创建并打开一个新文件
os.O_TRUNC: 打开一个文件并截断它的长度为零(必须有写权限)
os.O_EXCL: 如果指定的文件存在,返回错误
os.O_SHLOCK: 自动获取共享锁
os.O_EXLOCK: 自动获取独立锁
os.O_DIRECT: 消除或减少缓存效果
os.O_FSYNC : 同步写入
os.O_NOFOLLOW: 不追踪软链接
mode -- 类似 chmod()。
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, str.encode("This is test"))
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
执行以上程序输出结果为:
关闭文件成功!!
28
os.listdir(path)
返回path指定的文件夹包含的文件或文件夹的名字的列表。
输出指定地址下面所有的文件和文件夹名字列表显示出来
import os, sys
# 打开文件
path = "D:/Pycharmproject/demo1/YCL"
dirs = os.listdir( path )
# 输出所有文件和文件夹
for file in dirs:
print (file)
执行以上程序输出结果为:
foo.txt
foo1.txt
name.py
txt
27就是拷贝一个新的文件复制一个新的文件 名字不同内容一样
os.link(src, dst)
src -- 用于创建硬连接的源地址
dst -- 用于创建硬连接的目标地址
创建硬链接,名为参数 dst,指向参数 src
import os, sys
# 打开文件
path = "/var/www/html/foo.txt"
fd = os.open( path, os.O_RDWR|os.O_CREAT )
# 关闭文件
os.close( fd )
# 创建以上文件的拷贝
dst = "/tmp/foo.txt"
os.link( path, dst)
print ("创建硬链接成功!!")
执行以上程序输出结果为:
创建硬链接成功!!
15
这个很重要
os.fdopen(fd[, mode[, bufsize]])
通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
方法用于通过文件描述符 fd 创建一个文件对象,并返回这个文件对象。
该方法是内置函数 open() 的别名,可以接收一样的参数,唯一的区别是 fdopen() 的第一个参数必须是整型。
d -- 打开的文件的描述符,在Unix下,描述符是一个小整数。
mode -- 可选,和 Python 内建的 open 函数一样,mode参数可以指定『r,w,a,r+,w+,a+,b』等,表示文件的是只读的还是可以读写的,以及打开文件是以二进制还是文本形式打开。这些参数和C语言中的中fopen函数中指定的mode参数类似。
bufsize -- 可选,指定返回的文件对象是否带缓冲:bufsize=0,表示没有带缓冲;bufsize=1,表示该文件对象是行缓冲的;bufsize=正数,表示使用一个指定大小的缓冲冲,单位为byte,但是这个大小不是精确的;bufsize=负数,表示使用一个系统默认大小的缓冲,对于tty字元设备一般是行缓冲,而对于其他文件则一般是全缓冲。如果这个参数没有制定,则使用系统默认的缓冲设定。
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 获取以上文件的对象
fo = os.fdopen(fd, "w+")
# 获取当前文章
print ("Current I/O pointer position :%d" % fo.tell())
# 写入字符串
fo.write( "Python is a great language.\nYeah its great!!\n");
# 读取内容
os.lseek(fd, 0, 0)
str = os.read(fd, 100)
print ("Read String is : ", str)
# 获取当前位置
print ("Current I/O pointer position :%d" % fo.tell())
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
执行以上程序输出结果为:
Current I/O pointer position :0
Read String is : This is testPython is a great language.
Yeah its great!!
Current I/O pointer position :45
关闭文件成功!!
--------------------------------上面是重点法-----------------------------------
1 返回值 如果允许访问返回 True , 否则返回False。
os.access(path, mode)
os.access() 方法使用当前的uid/gid尝试访问路径。大部分操作使用有效的 uid/gid, 因此运行环境可以在 suid/sgid 环境尝试。
path -- 要用来检测是否有访问权限的路径。
mode -- mode为F_OK,测试存在的路径,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。
os.F_OK: 作为access()的mode参数,测试path是否存在。
os.R_OK: 包含在access()的mode参数中 , 测试path是否可读。
os.W_OK 包含在access()的mode参数中 , 测试path是否可写。
os.X_OK 包含在access()的mode参数中 ,测试path是否可执行。
检验权限模式
import os, sys
# 假定 /tmp/foo.txt 文件存在,并有读写权限
ret = os.access("/tmp/foo.txt", os.F_OK)
print ("F_OK - 返回值 %s"% ret)
ret = os.access("/tmp/foo.txt", os.R_OK)
print ("R_OK - 返回值 %s"% ret)
ret = os.access("/tmp/foo.txt", os.W_OK)
print ("W_OK - 返回值 %s"% ret)
ret = os.access("/tmp/foo.txt", os.X_OK)
print ("X_OK - 返回值 %s"% ret)
执行以上程序输出结果为:
F_OK - 返回值 True
R_OK - 返回值 True
W_OK - 返回值 True
X_OK - 返回值 False
2
os.chdir(path)path -- 要切换到的新路径。
改变当前工作目录到指定的路径。
返回值 如果允许访问返回 True , 否则返回False。
以下实例演示了 chdir() 方法的使用:
#!/usr/bin/python3
import os, sys
path = "/tmp"
# 查看当前工作目录
retval = os.getcwd()
print ("当前工作目录为 %s" % retval)
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("目录修改成功 %s" % retval)
执行以上程序输出结果为:
当前工作目录为 /www
目录修改成功 /tmp
3
os.chflags(path, flags)
设置路径的标记为数字标记。
path -- 文件名路径或目录路径。
flags -- 可以是以下值:
stat.UF_NODUMP: 非转储文件
stat.UF_IMMUTABLE: 文件是只读的
stat.UF_APPEND: 文件只能追加内容
stat.UF_NOUNLINK: 文件不可删除
stat.UF_OPAQUE: 目录不透明,需要通过联合堆栈查看
stat.SF_ARCHIVED: 可存档文件(超级用户可设)
stat.SF_IMMUTABLE: 文件是只读的(超级用户可设)
stat.SF_APPEND: 文件只能追加内容(超级用户可设)
stat.SF_NOUNLINK: 文件不可删除(超级用户可设)
stat.SF_SNAPSHOT: 快照文件(超级用户可设)
import os,stat
path = "/tmp/foo.txt"
# 为文件设置标记,使得它不能被重命名和删除
flags = stat.SF_NOUNLINK
retval = os.chflags( path, flags )
print ("返回值: %s" % retval)
执行以上程序输出结果为:
返回值: None
4
os.chmod(path, mode)
方法用于更改文件或目录的权限。 Unix 系统可用。
path -- 文件名路径或目录路径。
flags -- 可用以下选项按位或操作生成, 目录的读权限表示可以获取目录里文件名列表, ,执行权限表示可以把工作目录切换到此目录 ,删除添加目录里的文件必须同时有写和执行权限 ,文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用。
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下取消只读
import os, sys, stat
# 假定 /tmp/foo.txt 文件存在,设置文件可以通过用户组执行
os.chmod("/tmp/foo.txt", stat.S_IXGRP)
# 设置文件可以被其他用户写入
os.chmod("/tmp/foo.txt", stat.S_IWOTH)
print ("修改成功!!")
5
os.chown(path, uid, gid)
更改文件所有者方法用于更改文件所有者,如果不修改可以设置为 -1, 你需要超级用户权限来执行权限修改操作。
只支持在 Unix 下使用。
path -- 设置权限的文件路径
uid -- 所属用户 ID
gid -- 所属用户组 ID
#!/usr/bin/python3
import os, sys
# 假定 /tmp/foo.txt 文件存在.
# 设置所有者 ID 为 100
os.chown("/tmp/foo.txt", 100, -1)
print ("修改权限成功!!")
执行以上程序输出结果为:
修改权限成功!!
6
os.chroot(path)
改变当前进程的根目录
方法用于更改当前进程的根目录为指定的目录,使用该函数需要管理员权限。
在 unix 中有效。
#!/usr/bin/python3
import os, sys
# 设置根目录为 /tmp
os.chroot("/tmp")
print ("修改根目录成功!!")
执行以上程序输出结果为:
修改根目录成功!!
7
os.close(fd)
关闭文件描述符 fd 文件是空的才可以写入
# -*- coding: utf-8 -*
#D:/Pycharmproject/demo1/YCL
import os, sys
# 打开文件
fd = os.open("foo.txt", os.O_RDWR|os.O_CREAT )
# str = 'this is fujieace.com '
# str = str.encode()
# os.write(fd, str) 这样也可以写入
# 写入字符串
os.write(fd, "this is fujieace.com".encode())
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
8
os.closerange(fd_low, fd_high) 这个可以随便写入
关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
参数
fd_low -- 最小文件描述符
fd_high -- 最大文件描述符
该方法类似于:
for fd in xrange(fd_low, fd_high):
try:
os.close(fd)
except OSError:
pass
实例
以下实例演示了 closerange() 方法的使用:
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# str = 'this is fujieace.com ' 到这里写前面就是加到前面反正相反
# str = str.encode()
# os.write(fd,str)
# 写入字符串
os.write(fd,"ycl".encode()) 这里也是到这里写前面就是加到前面反正相反
# 关闭文件
os.closerange( fd, fd)
print ("关闭文件成功!!")
9方法用于复制文件描述符 fd。
解释:就是刚开始文件里有很多llllllllllllll
你运行后输入你要插入的文字后比如下面This is test是你要写入的
运行后输出结果:
This is test1111111111 把你的文件文字替换了
os.dup(fd)
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 复制文件描述符
d_fd = os.dup( fd )
# 使用复制的文件描述符写入文件
os.write(d_fd, "This is test".encode())
# 关闭文件
os.closerange( fd, d_fd)
print ("关闭所有文件成功!!")
执行以上程序输出结果为:
关闭所有文件成功!!
10
os.dup2(fd, fd2)把fd里面的内容复制到fd2
将一个文件描述符 fd 复制到另一个 fd2
import os
# 打开一个文件
f=open('txt','a')
# 将这个文件描述符代表的文件,传递给 1 描述符指向的文件(也就是 stdout)
os.dup2(f.fileno(), 1)
# 关闭文件
f.close()
# print 输出到标准输出流,就是文件描述符1
print('runoob')
print('google')
执行以上程序输出结果为, 生成一个txt文件,内容是::
runoob
11
os.fchdir(fd)
Unix 上可用。
通过文件描述符改变当前工作目录
import os, sys
# 首先到目录 "/var/www/html"
os.chdir("/var/www/html" )
# 输出当前目录
print ("当前工作目录为 : %s" % os.getcwd())
# 打开新目录 "/tmp"
fd = os.open( "/tmp", os.O_RDONLY )
# 使用 os.fchdir() 方法修改到新目录
os.fchdir(fd)
# 输出当前目录
print ("当前工作目录为 : %s" % os.getcwd())
# 关闭打开的目录
os.close( fd )
12
os.fchmod(fd, mode)
改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
Unix上可用。
fd -- 文件描述符
mode -- 可以是以下一个或多个组成,多个使用 "|" 隔开:
stat.S_ISUID:设置 UID 位
stat.S_ISGID: 设置组 ID 位
stat.S_ENFMT: 系统文件锁定的执法行动
stat.S_ISVTX: 在执行之后保存文字和图片
stat.S_IREAD: 对于拥有者读的权限,Unix V7 版本中 stat.S_IRUSR 的代名词
stat.S_IWRITE: 对于拥有者写的权限,Unix V7 版本中 stat.S_IWUSR 的代名词
stat.S_IEXEC: 对于拥有者执行的权限,Unix V7 版本中 stat.S_IXUSR 的代名词
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:对于其他组执行的权限
返回值
该方法没有返回值。
实例
以下实例演示了 fchmod() 方法的使用:
#!/usr/bin/python3
import os, sys, stat
# 打开文件 "/tmp/foo.txt"
fd = os.open( "/tmp", os.O_RDONLY )
# 设置文件可通过组执行
os.fchmod( fd, stat.S_IXGRP)
# 设置文件可被其他用户写入
os.fchmod(fd, stat.S_IWOTH)
print ("修改权限成功!!")
# 关闭文件
os.close( fd )
执行以上程序输出结果为:
修改权限成功!!
13
os.fchown(fd, uid, gid)Unix上可用。
修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
fd -- 文件描述符
uid -- 文件所有者的用户id
gid -- 文件所有者的用户组id
返回值
该方法没有返回值。
实例
以下实例演示了 fchown() 方法的使用:
实例(Python 3.0+)
#!/usr/bin/python3
import os, sys, stat
# 打开文件 "/tmp/foo.txt"
fd = os.open( "/tmp", os.O_RDONLY )
# 设置文件的用户 id 为 100
os.fchown( fd, 100, -1)
# 设置文件的用户组 id 为 50
os.fchown( fd, -1, 50)
print ("修改权限成功!!")
# 关闭文件
os.close( fd )
执行以上程序输出结果为:
修改权限成功!!
14
os.fdatasync(fd)
强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
import os, sys
# 打开文件 "/tmp/foo.txt"
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test")
# 使用 fdatasync() 方法
os.fdatasync(fd)
# 读取文件
os.lseek(fd, 0, 0)
str = os.read(fd, 100)
print ("读取的字符是 : ", str)
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
执行以上程序输出结果为:
读取的字符是 : This is test
关闭文件成功!!
16
os.fpathconf(fd, name) Unix上可用。
返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
fd -- 打开的文件的描述符。
name -- 可选,和buffersize参数和Python内建的open函数一样,mode参数可以指定『r,w,a,r+,w+,a+,b』等,表示文件的是只读的还是可以读写的,以及打开文件是以二进制还是文本形式打开。这些参数和C语言中的中fopen函数中指定的mode参数类似。
#!/usr/bin/python3
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
print ("%s" % os.pathconf_names)
# 获取最大文件连接数
no = os.fpathconf(fd, 'PC_LINK_MAX')
print ("文件最大连接数为 :%d" % no)
# 获取文件名最大长度
no = os.fpathconf(fd, 'PC_NAME_MAX')
print ("文件名最大长度为 :%d" % no)
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
执行以上程序输出结果为:
{'PC_MAX_INPUT': 2, 'PC_VDISABLE': 8, 'PC_SYNC_IO': 9,
'PC_SOCK_MAXBUF': 12, 'PC_NAME_MAX': 3, 'PC_MAX_CANON': 1,
'PC_PRIO_IO': 11, 'PC_CHOWN_RESTRICTED': 6, 'PC_ASYNC_IO': 10,
'PC_NO_TRUNC': 7, 'PC_FILESIZEBITS': 13, 'PC_LINK_MAX': 0,
'PC_PIPE_BUF': 5, 'PC_PATH_MAX': 4}
文件最大连接数为 :127
文件名最大长度为 :255
Closed the file successfully!!
17
os.fstat(fd) 该方法是获取信息
fstat 方法返回的结构:
返回文件描述符fd的状态,像stat()。
st_dev: 设备信息
st_ino: 文件的i-node值
st_mode: 文件信息的掩码,包含了文件的权限信息,文件的类型信息(是普通文件还是管道文件,或者是其他的文件类型)
st_nlink: 硬连接数
st_uid: 用户ID
st_gid: 用户组 ID
st_rdev: 设备 ID (如果指定文件)
st_size: 文件大小,以byte为单位
st_blksize: 系统 I/O 块大小
st_blocks: 文件的是由多少个 512 byte 的块构成的
st_atime: 文件最近的访问时间
st_mtime: 文件最近的修改时间
st_ctime: 文件状态信息的修改时间(不是文件内容的修改时间)
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 获取元组
info = os.fstat(fd)
print ("文件信息 :", info)
# 获取文件 uid
print ("文件 UID :%d" % info.st_uid)
# 获取文件 gid
print ("文件 GID :%d" % info.st_gid)
# 关闭文件
os.close( fd)
执行以上程序输出结果为:
文件信息 : (33261, 3753776L, 103L, 1, 0, 0,
102L, 1238783197, 1238786767, 1238786767)
文件 UID :0
文件 GID :0
18
os.fstatvfs(fd) Unix上可用。
返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
f_bsize: 文件系统块大小
f_frsize: 分栈大小
f_blocks: 文件系统数据块总数
f_bfree: 可用块数
f_bavail:非超级用户可获取的块数
f_files: 文件结点总数
f_ffree: 可用文件结点数
f_favail: 非超级用户的可用文件结点数
f_fsid: 文件系统标识 ID
f_flag: 挂载标记
f_namemax: 最大文件长度
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 获取元组
info = os.fstatvfs(fd)
print ("文件信息 :", info)
# 获取文件名最大长度
print ("文件名最大长度 :%d" % info.f_namemax)
# 获取可用块数
print ("可用块数 :%d" % info.f_bfree)
# 关闭文件
os.close( fd)
执行以上程序输出结果为:
文件信息 : (4096, 4096, 2621440L, 1113266L, 1113266L,
8929602L, 8764252L, 8764252L, 0, 255)
文件名最大长度 :255
可用块数 :1113266
19
os.fsync(fd) 在Windows, 调用 _commit()函数。
强制将文件描述符为fd的文件写入硬盘。
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test")
# 使用 fsync() 方法.
os.fsync(fd)
# 读取内容
os.lseek(fd, 0, 0)
str = os.read(fd, 100)
print ("读取的字符串为 : ", str)
# 关闭文件
os.close( fd)
print ("关闭文件成功!!")
执行以上程序输出结果为:
读取的字符串为 : This is test
关闭文件成功!!
20Unix上可用。
os.ftruncate(fd, length)
#!/usr/bin/python3
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test - This is test")
# 使用 ftruncate() 方法
os.ftruncate(fd, 10)
# 读取内容
os.lseek(fd, 0, 0)
str = os.read(fd, 100)
print ("读取的字符串是 : ", str)
# 关闭文件
os.close( fd)
print ("关闭文件成功!!")
执行以上程序输出结果为:
读取的字符串是 : This is te
关闭文件成功!!
裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21
os.getcwd()
返回当前工作目录
import os, sys
# 切换到 "/var/www/html" 目录
os.chdir("/var/www/html" )
# 打印当前目录
print ("当前工作目录 : %s" % os.getcwd())
# 打开 "/tmp"
fd = os.open( "/tmp", os.O_RDONLY )
# 使用 os.fchdir() 方法修改目录
os.fchdir(fd)
# 打印当前目录
print ("当前工作目录 : %s" % os.getcwd())
# 关闭文件
os.close( fd )
执行以上程序输出结果为:
当前工作目录 : /var/www/html
当前工作目录 : /tmp
22
os.getcwdu()
返回一个当前工作目录的Unicode对象
import os, sys
# 切换到 "/var/www/html" 目录
os.chdir("/var/www/html" )
# 打印当前目录
print ("当前工作目录 : %s" % os.getcwdu())
# 打开 "/tmp"
fd = os.open( "/tmp", os.O_RDONLY )
# 使用 os.fchdir() 方法修改目录
os.fchdir(fd)
# 打印当前目录
print ("当前工作目录 : %s" % os.getcwdu())
# 关闭文件
os.close( fd )
执行以上程序输出结果为:
当前工作目录 : /var/www/html
当前工作目录 : /tmp
23
os.isatty(fd)
如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
str = "This is runoob.com site"
os.write(fd,bytes(str, 'UTF-8'))
# 使用 isatty() 查看文件
ret = os.isatty(fd)
print ("返回值: ", ret)
# 关闭文件
os.close( fd )
执行以上程序输出结果为:
返回值: False
24
os.lchflags(path, flags) 只支持在 Unix 下使用。
设置路径的标记为数字标记,类似 chflags(),但是没有软链接
path -- 设置标记的文件路径
flags -- 可以由一个或多个标记组合,多个使用"|"隔开:
UF_NODUMP: 非转储文件
UF_IMMUTABLE: 文件是只读的
UF_APPEND: 文件只能追加内容
UF_NOUNLINK: 文件不可删除
UF_OPAQUE: 目录不透明,需要通过联合堆栈查看
SF_ARCHIVED: 可存档文件(超级用户可设)
SF_IMMUTABLE: 文件是只读的(超级用户可设)
SF_APPEND: 文件只能追加内容(超级用户可设)
SF_NOUNLINK: 文件不可删除(超级用户可设)
SF_SNAPSHOT: 快照文件(超级用户可设)
import os, sys
# 打开文件
path = "/var/www/html/foo.txt"
fd = os.open( path, os.O_RDWR|os.O_CREAT )
# 关闭文件
os.close( fd )
# 修改文件标记
ret = os.lchflags(path, os.UF_IMMUTABLE )
print ("修改文件标记成功!!")
执行以上程序输出结果为:
修改文件标记成功!!
25
os.lchmod(path, mode) 只支持在 Unix 下使用。
修改连接文件权限
path -- 设置标记的文件路径
mode -- 可以是以下一个或多个组成,多个使用 "|" 隔开:
stat.S_ISUID:设置 UID 位
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 os, sys
# 打开文件
path = "/var/www/html/foo.txt"
fd = os.open( path, os.O_RDWR|os.O_CREAT )
# 关闭文件
os.close( fd )
# 修改文件权限
# 设置文件可以通过组执行
os.lchmod( path, stat.S_IXGRP)
# 设置文件可以被其他用户写入
os.lchmod("/tmp/foo.txt", stat.S_IWOTH)
print ("修改权限成功!!")
执行以上程序输出结果为:
修改权限成功!!
26
os.lchown(path, uid, gid)
更改文件所有者,类似 chown,但是不追踪链接。
path -- 设置权限的文件路径
uid -- 所属用户 ID
gid -- 所属用户组 ID
import os, sys
# 打开文件
path = "/var/www/html/foo.txt"
fd = os.open( path, os.O_RDWR|os.O_CREAT )
# 关闭打开的文件
os.close( fd )
# 修改文件权限
# 设置文件所属用户 ID
os.lchown( path, 500, -1)
# 设置文件所属用户组 ID
os.lchown( path, -1, 500)
print ("修改权限成功!!")
执行以上程序输出结果为:
修改权限成功!!
29
os.lseek(fd, pos, how)
设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
fd -- 文件描述符。
pos -- 这是相对于给定的参数 how 在文件中的位置。。
how -- 文件内参考位置。SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始。
#!/usr/bin/python3
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test".encode()) #win10必须加 .encode()
# 所有 fsync() 方法
os.fsync(fd)
# 从开始位置读取字符串
os.lseek(fd, 0, 0)
str = os.read(fd, 100)
print ("Read String is : ", str)
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
执行以上程序输出结果为:
关闭文件成功!!
30
os.lstat(path)
像stat(),但是没有软链接
import os, sys
# 打开文件
path = "/var/www/html/foo.txt"
fd = os.open( path, os.O_RDWR|os.O_CREAT )
# 关闭打开的文件
os.close( fd )
# 获取元组
info = os.lstat(path)
print ("文件信息 :", info)
# 获取文件 uid
print ("文件 UID :%d" % info.st_uid)
# 获取文件 gid
print ("文件 GID :%d" % info.st_gid)
执行以上程序输出结果为:
文件信息 : (33261, 3450178L, 103L, 1, 500, 500, 0L,
1238866944, 1238866944, 1238948312)
文件 UID :500
文件 GID :500
31
os.major(device)
从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
import os, sys
path = "/var/www/html/foo.txt"
# 获取元组
info = os.lstat(path)
# 获取 major 和 minor 设备号
major_dnum = os.major(info.st_dev)
minor_dnum = os.minor(info.st_dev)
print ("Major 设备号 :", major_dnum)
print ("Minor 设备号 :", minor_dnum)
执行以上程序输出结果为:
Major 设备号 : 0
Minor 设备号 : 103
32
os.makedev(major, minor)
import os, sys
path = "/var/www/html/foo.txt"
# 获取元组
info = os.lstat(path)
# 获取 major 和 minor 设备号
major_dnum = os.major(info.st_dev)
minor_dnum = os.minor(info.st_dev)
print ("Major 设备号 :", major_dnum)
print ("Minor 设备号 :", minor_dnum)
# 生成设备号
dev_num = os.makedev(major_dnum, minor_dnum)
print ("设备号 :", dev_num)
执行以上程序输出结果为:
Major 设备号 : 0
Minor 设备号 : 103
设备号 : 103
major -- Major 设备号。
minor -- inor 设备号。
以major和minor设备号组成一个原始设备号
33
os.makedirs(path[, mode]) 创建一个文件夹
递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
path -- 需要递归创建的目录。
mode -- 权限模式。
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily"
os.makedirs( path, 0o777 );
print ("路径被创建")
执行以上程序输出结果为:
路径被创建
34
os.minor(device)
从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
device -- 原始的设备(使用stat中的st_dev或者st_rdev field )
import os, sys
path = "/var/www/html/foo.txt"
# 获取元组
info = os.lstat(path)
# 获取 major 和 minor 设备号
major_dnum = os.major(info.st_dev)
minor_dnum = os.minor(info.st_dev)
print ("Major 设备号 :", major_dnum)
print ("Minor 设备号 :", minor_dnum)
执行以上程序输出结果为:
Major 设备号 : 0
Minor 设备号 : 103
35
os.mkdir(path[, mode]) 创建一个文件夹
以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
import os, sys
# 创建的目录
path = "/tmp/home/monthly/daily/hourly"
os.mkdir( path, 0755 )
print ("目录已创建")
执行以上程序输出结果为:
目录已创建
36
os.mkfifo(path[, mode])
path -- 要创建的目录
mode -- 要为目录设置的权限数字模式
创建命名管道,mode 为数字,默认为 0666 (八进制)
import os, sys
# 创建的目录
path = "/tmp/hourly"
os.mkfifo( path, 0644 )
print ("路径被创建")
37
os.mknod(filename[, mode=0600, device])
创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
filename -- 创建的文件系统节点
mode -- mode指定创建或使用节点的权限, 组合 (或者bitwise) stat.S_IFREG, stat.S_IFCHR, stat.S_IFBLK, 和stat.S_IFIFO (这些常数在stat模块). 对于 stat.S_IFCHR和stat.S_IFBLK, 设备定义了 最新创建的设备特殊文件 (可能使用 os.makedev()),其它都将忽略。
device -- 可选,指定创建文件的设备
import os
import stat
filename = '/tmp/tmpfile'
mode = 0600|stat.S_IRUSR
# 文件系统节点指定不同模式
os.mknod(filename, mode)
执行以上程序输出结果为:
-rw-------. 1 root root 0 Apr 30 02:38 tmpfile
39
os.openpty()
打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
import os
# 主 pty, 从 tty
m,s = os.openpty()
print (m)
print (s)
# 显示终端名
s = os.ttyname(s)
print (m)
print (s)
执行以上程序输出结果为:
3
4
3
/dev/pty0
40
os.pathconf(path, name)
返回相关文件的系统配置信息。
d -- 文件描述符
name -- 检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。一些平台也定义了一些额外的名字。这些名字在主操作系统上pathconf_names的字典中。对于不在pathconf_names中的配置变量,传递一个数字作为名字,也是可以接受的。
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
print ("%s" % os.pathconf_names)
# 获取文件最大连接数
no = os.fpathconf(fd, 'PC_LINK_MAX')
print ("Maximum number of links to the file. :%d" % no)
# 获取文件名最大长度
no = os.fpathconf(fd, 'PC_NAME_MAX')
print ("Maximum length of a filename :%d" % no)
# 关闭文件
os.close( fd)
print ("关闭文件成功!!")
执行以上程序输出结果为:
关闭文件成功!!
41
os.pipe()
创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
import os, sys
print ("The child will write text to a pipe and ")
print ("the parent will read the text written by child...")
# 文件描述符 r, w 用于读、写
r, w = os.pipe()
processid = os.fork()
if processid:
# 父进程
# 关闭文件描述符 w
os.close(w)
r = os.fdopen(r)
print ("Parent reading")
str = r.read()
print ("text =", str)
sys.exit(0)
else:
# 子进程
os.close(r)
w = os.fdopen(w, 'w')
print ("Child writing")
w.write("Text written by child...")
w.close()
print ("Child closing")
sys.exit(0)
执行以上程序输出结果为:
The child will write text to a pipe and
the parent will read the text written by child...
Parent reading
Child writing
Child closing
text = Text written by child...
42
os.popen(command[, mode[, bufsize]])
从一个 command 打开一个管道
command -- 使用的命令。
mode -- 模式权限可以是 'r'(默认) 或 'w'。
bufsize -- 指明了文件需要的缓冲大小:0意味着无缓冲;1意味着行缓冲;其它正值表示使用参数大小的缓冲(大概值,以字节为单位)。负的bufsize意味着使用系统的默认值,一般来说,对于tty设备,它是行缓冲;对于其它文件,它是全缓冲。如果没有改参数,使用系统的默认值。
返回值
返回一个文件描述符号为fd的打开的文件对象
实例
以下实例演示了 popen() 方法的使用:
#!/usr/bin/python3
import os, sys
# 使用 mkdir 命令
a = 'mkdir nwdir'
b = os.popen(a,'r',1)
print (b)
执行以上程序输出结果为:
open file 'mkdir nwdir', mode 'r' at 0x81614d0
44
os.readlink(path)
返回软链接所指向的文件
import os
src = '/usr/bin/python'
dst = '/tmp/python'
# 创建软链接
os.symlink(src, dst)
# 使用软链接显示源链接
path = os.readlink( dst )
print (path)
执行以上程序输出结果为:
/usr/bin/python
51 返回值 返回 True 或 False。
os.stat_float_times([newvalue])
决定stat_result是否以float对象显示时间戳
newvalue -- 如果为 True, 调用 stat() 返回 floats,如果 False, 调用 stat 返回 ints。如果没有该参数返回当前设置。
import os, sys
# Stat 信息
statinfo = os.stat('a2.py')
print (statinfo)
statinfo = os.stat_float_times()
print (statinfo)
执行以上程序输出结果为:
posix.stat_result(st_mode=33188, st_ino=3940649674337682L, st_dev=277923425L,
st_nlink=1, st_uid=400, st_gid=401, st_size=335L, st_atime=1330498089, st_mtime=13
30498089, st_ctime=1330498089)
True
52
os.statvfs(path)
获取指定路径的文件系统统计信息
path -- 文件路径。
返回值
返回的结构:
f_bsize: 文件系统块大小
f_frsize: 分栈大小
f_blocks: 文件系统数据块总数
f_bfree: 可用块数
f_bavail:非超级用户可获取的块数
f_files: 文件结点总数
f_ffree: 可用文件结点数
f_favail: 非超级用户的可用文件结点数
f_fsid: 文件系统标识 ID
f_flag: 挂载标记
f_namemax: 最大文件长度
import os, sys
# 显示 "a1.py" 文件的 statvfs 信息
stinfo = os.statvfs('a1.py')
print (stinfo)
执行以上程序输出结果为:
posix.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=1909350L, f_bfree=1491513L,
f_bavail=1394521L, f_files=971520L, f_ffree=883302L, f_fvail=883302L, f_flag=0,
f_namemax=255)
53
os.symlink(src, dst)
参数
src -- 源地址。
dst -- 目标地址。
创建一个软链接
import os
src = '/usr/bin/python'
dst = '/tmp/python'
# 创建软链接
os.symlink(src, dst)
print ("软链接创建成功")
执行以上程序输出结果为:
软链接创建成功
54
os.tcgetpgrp(fd)
返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
import os, sys
# 显示当前目录
print ("当前目录 :%s" %os.getcwd())
# 修改目录到 /dev/tty
fd = os.open("/dev/tty",os.O_RDONLY)
f = os.tcgetpgrp(fd)
# 显示进程组
print ("相关进程组: ")
print (f)
os.close(fd)
print ("关闭文件成功!!")
执行以上程序输出结果为:
当前目录 :/tmp
相关进程组:
2670
关闭文件成功!!
55
os.tcsetpgrp(fd, pg)
设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
import os, sys
# 显示当前目录
print( "当前目录 :%s" %os.getcwd() )
# 修改目录到 /dev/tty
fd = os.open("/dev/tty",os.O_RDONLY)
f = os.tcgetpgrp(fd)
# 显示进程组
print( "关联进程组: " )
print( f )
# 设置进程组
os.tcsetpgrp(fd,2672)
print( "done" )
os.close(fd)
print( "关闭文件成功!!" )
执行以上程序输出结果为:
当前目录 :/tmp
关联进程组:
2672
done
关闭文件成功!!
56
os.tempnam([dir[, prefix]])
Python3 中已删除。返回唯一的路径名用于创建临时文件。
57
os.tmpfile()
Python3 中已删除。返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
58
os.tmpnam()
Python3 中已删除。为创建一个临时文件返回一个唯一的路径
59
os.ttyname(fd)
返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
import os, sys
# 显示当前目录
print ("当前目录 :%s" %os.getcwd())
# 修改目录为 /dev/tty
fd = os.open("/dev/tty",os.O_RDONLY)
p = os.ttyname(fd)
print ("关联的终端为: ")
print (p)
print ("done!!")
os.close(fd)
print ("关闭文件成功!!")
执行以上程序输出结果为:
当前目录 :/tmp
关联的终端为:
/dev/tty
done!!
关闭文件成功!!
别人的笔记
import os
import os.path
"""获取指定目录及其子目录下的 py 文件路径说明:l 用于存储找到的 py 文件路径 get_py 函数,递归查找并存储 py 文件路径于 l"""
l = []
def get_py(path,l):
fileList = os.listdir(path) #获取path目录下所有文件
for filename in fileList:
pathTmp = os.path.join(path,filename) #获取path与filename组合后的路径
if os.path.isdir(pathTmp): #如果是目录
get_py(pathTmp,l) #则递归查找
elif filename[-3:].upper()=='.PY': #不是目录,则比较后缀名
l.append(pathTmp)
path = input('请输入路径:').strip()
get_py(path,l)
print('在%s目录及其子目录下找到%d个py文件\n分别为:\n'%(path,len(l)))
for filepath in l:
print(filepath+'\n')
Stack Overflow
Stack Overflow
530***193@qq.com
3年前 (2017-10-08)
RyenToretto
951***321@qq.com
参考地址
1
显示所有视频格式文件,mp4,avi,rmvb
import os
def search_file(start_dir, target) :
os.chdir(start_dir)
for each_file in os.listdir(os.curdir) :
ext = os.path.splitext(each_file)[1]
if ext in target :
vedio_list.append(os.getcwd() + os.sep + each_file + os.linesep)
if os.path.isdir(each_file) :
search_file(each_file, target) # 递归调用
os.chdir(os.pardir) # 递归调用后切记返回上一层目录
start_dir = input('请输入待查找的初始目录:')
program_dir = os.getcwd()
target = ['.mp4', '.avi', '.rmvb']
vedio_list = []
search_file(start_dir, target)
f = open(program_dir + os.sep + 'vedioList.txt', 'w')
f.writelines(vedio_list)
f.close()
RyenToretto
RyenToretto
951***321@qq.com
参考地址
3年前 (2017-10-12)
极简XksA
820***471@qq.com
参考地址
5
批量修改文件名
python 对文件进行批量改名用到的是 os 模块中的 listdir 方法和 rename 方法。
os.listdir(dir) : 获取指定目录下的所有子目录和文件名
os.rename(原文件名,新文件名) : 对文件或目录改名
把混乱的文件名改成有序的文件名:
实列
import os
path=input('请输入文件路径(结尾加上/):')
#获取该目录下所有文件,存入列表中
fileList=os.listdir(path)
n=0
for i in fileist:
#设置旧文件名(就是路径+文件名)
oldname=path+ os.sep + fileList[n] # os.sep添加系统分隔符
#设置新文件名
newname=path+ + os.sep +'a'+str(n+1)+'.JPG'
os.rename(oldname,newname) #用os模块中的rename方法对文件改名
print(oldname,'======>',newname)
n+=1
3
os.replace(old, new) 将文件重命名。
首先创建两个文件:
1.txt 内容是1
2.txt 内容是2
import OS
os.replace('1.txt', '2.txt')
执行后发现只剩下一个:2.txt,但内容是 1。
所以 os.replace(file1,file2) 这个函数相当于用 file2 给 file1 重命名,并删除 file2。
pythonos文件目录方法_PythonOS 文件目录方法相关推荐
- java 文件目录是否存在_java中判断文件目录是否存在的方法
java中判断文件目录是否存在的方法 发布时间:2020-06-23 09:34:47 来源:亿速云 阅读:72 作者:Leah 本篇文章展示了java中判断文件目录是否存在的方法具体操作,代码简明扼 ...
- Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块
Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...
- 文件写入的6种方法,这种方法性能最好
在 Java 中操作文件的方法本质上只有两种:字符流和字节流,而字节流和字符流的实现类又有很多,因此在文件写入时我们就可以选择各种各样的类来实现.我们本文就来盘点一下这些方法,顺便测试一下它们性能,以 ...
- Go 学习笔记(34)— Go 方法声明、方法调用、方法值、方法表达式、切片对象方法、指针对象方法
1. 方法声明 Go 语言的方法非常纯粹, 可以看作特殊类型的函数, 其显式地将对象实例或指针作为函数的第一个参数, 并且参数名可以自己指定, 而不强制要求一定是 this 或 self .这个对象实 ...
- ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客
jQuery ajax - post() 实例 请求 test.php 网页,忽略返回值: $.post("test.php"); 通过 AJAX POST 请求改变 div 元素 ...
- C++学习笔记24,方法重写与方法隐藏
该博文仅用于交流学习.请慎用于不论什么商业用途.本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 方法重写.是指在子类中又一 ...
- Java 8新特性——default方法(defenece方法)介绍
为什么80%的码农都做不了架构师?>>> 本文由 ImportNew - 黄小非 翻译自 blog.sanaulla.info.如需转载本文,请先参见文章末尾处的转载要求. 我 ...
- 【hibernate框架】核心开发接口-saveOrUpdate方法与delete方法
1.saveOrUpdate方法剖析 saveOrUpdate方法:分情况看是save还是update. 示例: public void testSaveOrUpdate(){Teacher t=ne ...
- python 类 公有属性、私有属性、公有方法、私有方法
python 类 公有属性.私有属性.公有方法.私有方法 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Int ...
- @Transactional-同一个类中方法自调,调用方法事物失效
问题分析 一个类中的方法调用另一个事物传播性为创建事物的方法,调用的方法事物失效? SpringAOP 代理的Service对象调用了其方法,这个方法再去调用这个Service中的其他方法是没有使用A ...
最新文章
- 从网络上获取一张图片简单的
- 数据可视化之 星图
- UIImagePikerController 浅析
- oracle中nvl()函数
- 5G NR中的两套绝对频域位置:GSCN和ARFCN
- 百度地图滚轮缩放,所在点偏移问题
- 企业实战_02_MyCat基本元素
- Android对接实现内网无纸化会议|智慧教室|实时同屏功能
- 信息学奥赛一本通(1319:【例6.1】排队接水)
- 网络:Server returned HTTP response code: 400(url中文)
- android gradle fail,Android Studio更新后,Android Gradle CompilationFailedException
- 【Vue.js 知识量化】vue-router 详解
- python数据拟合
- JD_Source Code for problem 1379
- 关于小凡模拟器设置完后找不到所要配置文件的问题
- 你知道chrome小恐龙游戏吗?3分钟使用JavaScript实现
- Multi-modal Knowledge Graphs for Recommender Systems论文解读
- 品优购项目--登录页面
- 推荐几本javascript与jquery的好书
- 大数据处理算法--Bloom Filter布隆过滤
热门文章
- HDFS加密存储(HDP、Ranger、Ranger KMS实现)
- 计算机word文档工作区名称,word文档界面名称 word文档的界面组成
- windows10如何使用Wallpaper Engine实现动态锁屏壁纸?把WE的壁纸应用到锁屏。
- 基于Markov区制转换模型的股票波动分析
- android第三方好用,有哪些好用的安卓ROM值得推荐?安卓端最好的第三方ROM介绍...
- java_opts 与catalina_opts区别_CATALINA_OPTS和 JAVA_OPTS区别
- android 4.4优化build.prop,Androidbuild.prop详细优化
- python k线斜率计算_关于数据拟合:找到斜率变化点作为自由参数 – Python
- 2022研究生数学建模ABCDEF思路
- 【LaTeX 教程】04. LaTeX 插入数学公式与符号