python 文件操作
os模块与目录相关的函数
os.getcwd()模块函数
功能:获取当前工作目录,即当前python脚本工作的目录路径【无参】
使用方法:os.getcwd()
格式如:a = os.getcwd()
#!/usr/bin/env python
# -*- coding:utf8 -*-
import os
a=os.getcwd()
print(a)
执行结果如下所示:
os.chdir()模块函数
功能:改变当前脚本工作目录;相当于shell下cd【有参】
使用方法:os.chdir("字符串格式要更改的路径")
格式如:os.chdir("D:")
#!/usr/bin/env python
# -*- coding:utf8 -*-
import os
os.chdir("D:/xftp") #修改当前目录 注:这里需要进行转义,见文章python 问题集锦
retval=os.getcwd() #修改后的目录为
print('目录修改成功 %s' % retval)
执行结果如下所示:
os.fchdir()模块函数
功能:通过文件描述符改变当前工作目录。该函数与上一个函数的功能基本相似,只是该函数以文件描述符作为参数来代表目录。
使用方法:os.fchdir(fd)
fd -- 文件描述符
#!/usr/bin/env python
# -*- coding:utf8 -*-
import os
#首先到目录"D:"
os.chdir("E:/pythonwork")
#输出当前目录
print('当前目录为:%s'% os.getcwd())
#打开新目录
fd=os.open("D:/xftp",os.O_RDONLY)
# 使用 os.fchdir() 方法修改到新目录
os.fchdir(fd)
# 输出当前目录
print('当前目录:%s'% os.getcwd())
执行结果如下所示:
os.open() 模块函数
功能:方法用于打开一个文件,并且设置需要的打开选项,模式参数mode参数是可选的,默认为 0777。
格式为:os.open(file, flags[, 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()。
实例
以下实例演示了 open() 方法的使用:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os, sys
# 打开文件
fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
str="This is test"
os.write(fd, str.encode())
# 关闭文件
os.close( fd )
print("关闭文件成功!!")
执行结果如下所示:
os.chroot()模块函数
功能:改变当前进程的根目录。
格式:os.chroot(path)
os.listdir()模块函数
功能: 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印【有参】
使用方法:os.listdir("目录名称")
格式如:a = os.listdir("lib")
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 打开文件
a = os.listdir( "E:/pyth") #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印【有参】
print(a)
执行结果如下所示:
os.mkdir()模块函数
功能:创建单级目录;相当于shell中mkdir 【有参】
创建 path 对应的目录,其中 mode 用于指定该目录的权限。该 mode参数代表一个 UNIX 风格的权限,比如 0o777 代表所有者可读/可写/可执行、组用户可读/可写/可执行、其他用户可读/可写/可执行
使用方法:os.mkdir(path[, mode])
格式如:os.mkdir("dsr")
#!/usr/bin/env python
# -*- coding:utf8 -*-
import os
os.mkdir("qwe") #生成单级目录;相当于shell中mkdir 【有参】
os.makedirs()模块函数
功能:其作用类似于 mkdir(),但该函数的功能更加强大,它可以边归创建目录。比如要创建 abc/xyz/wawa 目录,如果在当前目录下没有 abc 目录,那么使用 mkdir() 函数就会报错,而使用 makedirs() 函数则会先创建 abc,然后在其中创建 xyz 子目录,最后在 xyz 子目录下创建 wawa 子目录。
使用方法:os.makedirs(path[, mode])
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 打开文件
a = os.makedirs( "abc/xyz/wawa")
os.rmdir()模块函数
功能:删除 path 对应的空目录。如果目录非空,则抛出一个 OSError 异常。程序可以先用 os.remove() 函数删除文件。
使用方法:os.rmdir(path)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 打开文件
a = os.rmdir( "qwe")
os.removedirs()模块函数
功能:边归删除目录。其功能类似于 rmdir(),但该函数可以递归删除 abc/xyz/wawa 目录,它会从 wawa 子目录开始删除,然后删除 xyz 子目录,最后删除 abc 目录
使用方法:os.removedirs(path)
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
os.removedirs('abc/xyz/wawa')
os.rename(src, dst)
功能:重命名文件或目录,将 src 重名为 dst
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
os.mkdir('abc')
os.rename('abc','hef')
os.renames(old, new)模块函数
功能:对文件或目录进行递归重命名。其功能类似于 rename(),但该函数可以递归重命名 abc/xyz/wawa 目录,它会从 wawa 子目录开始重命名,然后重命名 xyz 子目录,最后重命名 abc 目录。
格式如:a = os.listdir("lib")
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import os
# 打开文件
os.makedirs("abc/efg/hig")
os.renames("abc/efg/hig",'as/df/gh')
os模块与权限相关的函数
os.access(path, mode):检查 path 对应的文件或目录是否具有指定权限。该函数的第二个参数可能是以下四个状态值的一个或多个值:
- os.F_OK:判断是否存在。
- os.R_OK:判断是否可读。
- os.W_OK:判断是否可写。
- os.X_OK:判断是否可执行。
实例:
import os
# 判断当前目录的权限
ret=os.access('.',os.F_OK|os.R_OK|os.W_OK|os.X_OK)
print('os.F_OK|os.R_OK|os.W_OK|os.X_OK 返回值为:',ret)
# 判断os.access_test.py文件的权限
ret=os.access('os.os.py',os.F_OK|os.R_OK|os.W_OK|os.X_OK)
print('os.F_OK|os.R_OK|os.W_OK|os.X_OK 返回值为:',ret)
执行以上程序,结果为:
os.chmod(path, mode):更改权限。其中 mode 参数代表要改变的权限,该参数支持的值可以是以下一个或多个值的组合:
- stat.S_IXOTH:其他用户有执行权限。
- stat.S_IWOTH:其他用户有写权限。
- stat.S_TROTH:其他用户有读权限。
- stat.S_IRWXO:其他用户有全部权限。
- stat.S_IXGRP:组用户有执行权限。
- stat.S_IWGRP:组用户有写权限。
- stat.S_IRGRP:组用户有读权限。
- stat.S_IRWXG:组用户有全部权限。
- stat.S_IXUSR:所有者有执行权限。
- stat.S_IWUSR:所有者有写权限。
- stat.S_IRUSR:所有者有读权限。
- stat.S_IRWXU:所有者有全部权限。
- stat.S_IREAD:Windows 将该文件设为只读的。
- stat.S_IWRITE:Windows 将该文件设为可写的。
前面的那些权限都是 UNIX 文件系统下有效的概念,UNIX 文件系统下的文件有一个所有者,跟所有者处于同一组的其他用户被称为组用户。因此在 UNIX 文件系统下允许为不同用户分配不同的权限。
实例:
import os, stat
# 将'os.os.py'文件的权限改为只读
os.chmod('os.py',stat.S_IREAD)
# 判断是否可写
ret=os.access('os.py',os.W_OK)
print('os.W_OK 返回值为:',ret)
执行以上程序,结果为:
os.chown(path, uid, gid):更改文件的所有者。其中 uid 代表用户 id,gid 代表组 id。该命令主要在 UNIX 文件系统下有效。
os.fchmod(fd, mode):改变一个文件的访问权限,该文件由文件描述符 fd 指定。该函数的功能与 os.chmod() 函数的功能相似,只是该函数使用 fd 代表文件。
os.fchown(fd, uid, gid):改变文件的所有者,该文件由文件描述符 fd 指定。该函数的功能与 os.chown() 函数的功能相似,只是该函数使用 fd 代表文件。
os模块与文件访问相关的函数
os.open(file, flags[, mode]):打开一个文件,并且设置打开选项,mode 参数是可选的。该函数返回文件描述符。其中 flags 代表打开文件的旗标,它支持如下一个或多个选项:
- os.O_RDONLY:以只读的方式打开。
- os.O_WRONLY:以只写的方式打开。
- os.O_RDWR:以读写的方式打开。
- os.O_NONBLOCK:打开时不阻塞。
- os.O_APPEND:以追加的方式打开。
- os.O_CREAT:创建并打开一个新文件。
- os.O_TRUNC:打开一个文件并截断它的长度为0(必须有写权限)。
- os.O_EXCL:在创建文件时,如果指定的文件存在,则返回错误。
- os.O_SHLOCK:自动获取共享锁。
- os.O_EXLOCK:自动获取独立锁。
- os.O_DIRECT:消除或减少缓存效果。
- os.O_FSYNC:同步写入。
- os.O_NOFOLLOW:不追踪软链接。
os.read(fd, n):从文件描述符 fd 中读取最多 n 个字节,返回读到的字符串。如果文件描述符副对应的文件己到达结尾,则返回一个空字节串。
os.write(fd, str):将字节串写入文件描述符 fd 中,返回实际写入的字节串长度。
os.close(fd):关闭文件描述符 fd。
实例:
import os
#打开文件
fd=os.open('os_read.py',os.O_RDWR)
#读取文件
ret=os.read(fd,100)
print(ret)
str=',it is good'
#写文件
wrt=os.write(fd,str.encode())
#读取文件
ret=os.read(fd,100)
print(ret)
#关闭文件
os.close(fd)
执行以上程序,返回的结果为:
os.lseek(fd, pos, how):该函数同样用于移动文件指针。fd为文件描述符;pos为移动的字节偏移量,how为相对参考点(文件开始、当前位置、结尾,分别对应os.SEEK_SET os.SEEK_CUR os.SEEK_END 或0,1,2)
实例1:
import os
#打开文件
fd=os.open('os_read.py',os.O_RDWR)
#读文件
ret=os.read(fd,100)
print(ret)
#移动文件
os.lseek(fd,0,0)
#写文件
str=',it is good'
wrt=os.write(fd,str.encode())
#读文件
ret=os.read(fd,100)
print(ret)
执行以上程序,结果为:
实例2:
import os
# 以读写、创建方式打开文件
fd = os.open('os_read.txt', os.O_RDWR|os.O_CREAT)
# 写入文件内容
len1 = os.write(fd, '水晶潭底银鱼跃,\n'.encode('utf-8'))
len2 = os.write(fd, '清徐风中碧竿横。\n'.encode('utf-8'))
# 将文件指针移动到开始处
os.lseek(fd, 0, os.SEEK_SET)
# 读取文件内容
data = os.read(fd, len1 + len2)
# 打印读取到字节串
print(data)
# 将字节串恢复成字符串
print(data.decode('utf-8'))
os.close(fd)
执行以上程序,返回结果为:
上面几个函数同样可用于执行文件的读写,程序通常会先通过 os.open() 打开文件,然后调用 os.read()、os.write() 来读写文件,当操作完成后通过 os.close() 关闭文件。
os.fdopen(fd[, mode[, bufsize]]):通过文件描述符 fd 打开文件,并返回对应的文件对象。
fd -- 打开的文件的描述符,在Unix下,描述符是一个小整数。
mode -- 可选,和bufsize参数和Python内建的open函数一样,mode参数可以指定『r,w,a,r+,w+,a+,b』等,表示文件的是只读的还是可以读写的,以及打开文件是以二进制还是文本形式打开。这些参数和C语言中的<stdio.h>中fopen函数中指定的mode参数类似。
bufsize -- 可选,指定返回的文件对象是否带缓冲:bufsize=0,表示没有带缓冲;bufsize=1,表示该文件对象是行缓冲的;bufsize=正数,表示使用一个指定大小的缓冲冲,单位为byte,但是这个大小不是精确的;bufsize=负数,表示使用一个系统默认大小的缓冲,对于tty字元设备一般是行缓冲,而对于其他文件则一般是全缓冲。如果这个参数没有制定,则使用系统默认的缓冲设定。
实例:
import os
#打开文件
fd=os.open('os_read.py',os.O_RDWR|os.O_CREAT)
#获取以上文件对象
fo=os.fdopen(fd,'w+')
#获取当前位置
print('当前位置为:%d'% fo.tell())
#写入字符串
fo.write('Python is a great language./nYear it is good')
#获取当前位置
print('当前位置为:%d'% fo.tell())
#读取文件
os.lseek(fd,0,0)
str=os.read(fd,100)
print('the string is:',str)
#关闭文件
os.close(fd)
print('关闭文件成功')
执行以上程序,返回的结果为:
os.closerange(fd_low, fd_high):关闭从 fd_low(包含)到 fd_high(不包含)范围的所有文件描述符。
os.dup(fd):复制文件描述符。
实例:
import os
#打开文件
fd=os.open('os_read.py',os.O_RDWR|os.O_CREAT)
#复制文件描述符
d_fd=os.dup(fd)
#使用复制的文件描述符写入文件
var='this is a test'
os.write(d_fd,var.encode())
#读取文件
os.lseek(fd,0,0)
str=os.read(fd,100)
print('the string is:',str)
#关闭文件
os.closerange(fd,d_fd)
print('关闭文件成功')
执行以上程序,返回的结果为:
os.dup2(fd,fd2):将一个文件描述符fd复制到另一个文件描述符fd2中。
os.ftruncate(fd, length):将 fd 对应的文件截断到 length 长度,因此此处传入的 length 参数不应该超过文件大小。
os.remove(path):删除 path 对应的文件。如果 path 是一个文件夹,则抛出 OSError 错误。如果要删除目录,则使用 os.rmdir()。
os.link(src, dst):创建从 src 到 dst 的硬链接。硬链接是 UNIX 系统的概念,如果在 Windows 系统中就是复制目标文件。
os.symlink(src, dst):创建从 src 到 dst 的符号链接,对应于 Windows 的快捷方式。
由于 Windows 权限的缘故,因此必须以管理员身份执行 os.symlink() 函数来创建快捷方式。
上面程序使用 symlink() 函数为指定文件创建符号链接,在 Windows 系统中就是创建快捷方式;使用 link() 函数创建硬链接,在 Windows 系统中就是复制文件。
运行上面程序,将会看到程序在当前目录下创建了一个名为“tt”的快捷方式,并将 os.link_test.py 文件复制为 dst 文件。
os模块与路径相关的函数
os.path.abspath()模块函数
功能:返回一个文件或者目录的规范化的绝对路径【有参】
使用方法:os.path.abspath("要返回规范绝对路径的文件或者目录名称")
格式如:a = os.path.abspath("mk.py")
import os
a=os.path.abspath('os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.split()模块函数
功能:将文件分割成目录和文件名二元组返回【有参】
使用方法:os.path.split("路径或名称")
格式如:a = os.path.split("mk.py")
import os
a=os.path.split('os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.dirname()模块函数【常用】
功能:返回文件的目录【有参】
使用方法:os.path.dirname("文件路径")
格式如:a = os.path.dirname("py/lib/mk.py")
import os
a=os.path.dirname('E:\pythonwork\os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.basename()模块函数
功能:返回文件最后的文件名。如何文件以/或\结尾【有参】
使用方法:os.path.basename("文件路径")
格式如:a = os.path.basename("py/lib/mk.py")
import os
a=os.path.basename('E:\pythonwork\os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.exists()模块函数【常用】
功能:如果文件存在,返回True;如果文件不存在,返回False【有参】
使用方法:os.path.exists("文件路径")
格式如:a = os.path.exists("H:/py/lib/mk.py")
import os
a=os.path.exists('E:\pythonwork\os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.isabs()模块函数【常用】
功能:如果文件是绝对路径,返回True【有参】
使用方法:os.path.isabs("文件路径")
格式如:a = os.path.isabs("H:/py/lib/mk.py")
import os
a=os.path.isabs('E:\pythonwork\os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.isfile()模块函数【常用】
功能:如果文件是一个存在的文件,返回True。否则返回False【有参】
使用方法:os.path.isfile("文件路径")
格式如:a = os.path.isfile("H:/py/lib/mk.py")
import os
a=os.path.isfile('E:\pythonwork\os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.isdir()模块函数【常用】
功能:如果目录是一个存在的目录,则返回True。否则返回False【有参】
使用方法:os.path.isdir("目录路径")
格式如:a = os.path.isdir("H:/py/lib")
import os
a=os.path.isdir('E:\pythonwork')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.join()模块函数【常用】
功能:将多个字符串路径组合成一个完整的路径返回,第一个绝对路径之前的参数将被忽略【有参】
使用方法:os.path.join("文件路径")
格式如:a = os.path.join(s1,s2,s3,s4)
import os
s1='E:'
s2='pythonwork'
s3='os.py'
a=os.path.join(s1,s2,s3)
#输出
print(a)
执行以上程序,返回的结果为:
os.path.getatime()模块函数
功能:返回所指向的文件或者目录的最后存取时间戳【有参】
使用方法:os.path.getatime("文件路径")
格式如:a = os.path.getatime("H:/py/lib")
import os
a=os.path.getatime('E:\pythonwork\os.py')
#输出
print(a)
执行以上程序,返回的结果为:
os.path.getmtime()模块函数
功能:返回所指向的文件或者目录的最后存取时间戳【有参】
使用方法:os.path.getmtime("文件路径")
格式如:a = os.path.getmtime("H:/py/lib")
import os
import time
a=os.path.getmtime('E:\pythonwork\os.py')
b=time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime(a))
#输出
print(a)
print(b)
执行以上程序,返回的结果为:
os.stat().st_size检查一个文件的大小,返回字节
使用方法:os.stat(要检查大小的文件路径或文件名称).st_size
格式:os.stat("32.png").st_size
import os
a=os.stat('E:\pythonwork\os.py').st_size
#输出
print(a)
执行以上程序,返回的结果为: