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

google

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 文件目录方法相关推荐

  1. java 文件目录是否存在_java中判断文件目录是否存在的方法

    java中判断文件目录是否存在的方法 发布时间:2020-06-23 09:34:47 来源:亿速云 阅读:72 作者:Leah 本篇文章展示了java中判断文件目录是否存在的方法具体操作,代码简明扼 ...

  2. Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块

    Python第二十二天   stat模块  os.chmod方法  os.stat方法  pwd  grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...

  3. 文件写入的6种方法,这种方法性能最好

    在 Java 中操作文件的方法本质上只有两种:字符流和字节流,而字节流和字符流的实现类又有很多,因此在文件写入时我们就可以选择各种各样的类来实现.我们本文就来盘点一下这些方法,顺便测试一下它们性能,以 ...

  4. Go 学习笔记(34)— Go 方法声明、方法调用、方法值、方法表达式、切片对象方法、指针对象方法

    1. 方法声明 Go 语言的方法非常纯粹, 可以看作特殊类型的函数, 其显式地将对象实例或指针作为函数的第一个参数, 并且参数名可以自己指定, 而不强制要求一定是 this 或 self .这个对象实 ...

  5. ajax post的回调函数另一个方法,jQueryajax–post()方法 - 米扑博客

    jQuery ajax - post() 实例 请求 test.php 网页,忽略返回值: $.post("test.php"); 通过 AJAX POST 请求改变 div 元素 ...

  6. C++学习笔记24,方法重写与方法隐藏

    该博文仅用于交流学习.请慎用于不论什么商业用途.本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 方法重写.是指在子类中又一 ...

  7. Java 8新特性——default方法(defenece方法)介绍

    为什么80%的码农都做不了架构师?>>>    本文由 ImportNew - 黄小非 翻译自 blog.sanaulla.info.如需转载本文,请先参见文章末尾处的转载要求. 我 ...

  8. 【hibernate框架】核心开发接口-saveOrUpdate方法与delete方法

    1.saveOrUpdate方法剖析 saveOrUpdate方法:分情况看是save还是update. 示例: public void testSaveOrUpdate(){Teacher t=ne ...

  9. python 类 公有属性、私有属性、公有方法、私有方法

    python 类 公有属性.私有属性.公有方法.私有方法 #!/usr/bin/env python # -*- encoding: utf-8 -*- """ @Int ...

  10. @Transactional-同一个类中方法自调,调用方法事物失效

    问题分析 一个类中的方法调用另一个事物传播性为创建事物的方法,调用的方法事物失效? SpringAOP 代理的Service对象调用了其方法,这个方法再去调用这个Service中的其他方法是没有使用A ...

最新文章

  1. 从网络上获取一张图片简单的
  2. 数据可视化之 星图
  3. UIImagePikerController 浅析
  4. oracle中nvl()函数
  5. 5G NR中的两套绝对频域位置:GSCN和ARFCN
  6. 百度地图滚轮缩放,所在点偏移问题
  7. 企业实战_02_MyCat基本元素
  8. Android对接实现内网无纸化会议|智慧教室|实时同屏功能
  9. 信息学奥赛一本通(1319:【例6.1】排队接水)
  10. 网络:Server returned HTTP response code: 400(url中文)
  11. android gradle fail,Android Studio更新后,Android Gradle CompilationFailedException
  12. 【Vue.js 知识量化】vue-router 详解
  13. python数据拟合
  14. JD_Source Code for problem 1379
  15. 关于小凡模拟器设置完后找不到所要配置文件的问题
  16. 你知道chrome小恐龙游戏吗?3分钟使用JavaScript实现
  17. Multi-modal Knowledge Graphs for Recommender Systems论文解读
  18. 品优购项目--登录页面
  19. 推荐几本javascript与jquery的好书
  20. 大数据处理算法--Bloom Filter布隆过滤

热门文章

  1. HDFS加密存储(HDP、Ranger、Ranger KMS实现)
  2. 计算机word文档工作区名称,word文档界面名称 word文档的界面组成
  3. windows10如何使用Wallpaper Engine实现动态锁屏壁纸?把WE的壁纸应用到锁屏。
  4. 基于Markov区制转换模型的股票波动分析
  5. android第三方好用,有哪些好用的安卓ROM值得推荐?安卓端最好的第三方ROM介绍...
  6. java_opts 与catalina_opts区别_CATALINA_OPTS和 JAVA_OPTS区别
  7. android 4.4优化build.prop,Androidbuild.prop详细优化
  8. python k线斜率计算_关于数据拟合:找到斜率变化点作为自由参数 – Python
  9. 2022研究生数学建模ABCDEF思路
  10. 【LaTeX 教程】04. LaTeX 插入数学公式与符号