CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
import os
权限检验
import os, sys
# 假定 /tmp/foo.txt 文件存在,并有读写权限
ret = os.access("D://my content//liyan//Desktop//New folder//foo.txt", os.F_OK)
print ("F_OK - 返回值 %s"% ret )
# 是否path存在
ret = os.access("D://my content//liyan//Desktop//New folder//foo.txt", os.R_OK)
print ("R_OK - 返回值 %s"% ret)
# path可读
ret = os.access("D://my content//liyan//Desktop//New folder//foo.txt", os.W_OK)
print ("W_OK - 返回值 %s"% ret)
# path可写
ret = os.access("D://my content//liyan//Desktop//New folder//foo.txt", os.X_OK)
print ("X_OK - 返回值 %s"% ret)
# path可执行
F_OK - 返回值 True
R_OK - 返回值 True
W_OK - 返回值 True
X_OK - 返回值 True
改变目录路径
import os, sys
path = "/tmp"
# 查看当前工作目录
retval = os.getcwd()
print ("当前工作目录为 %s" % retval)
# 修改当前工作目录
os.chdir( path )
# 查看修改后的工作目录
retval = os.getcwd()
print ("目录修改成功 %s" % retval)
当前工作目录为 C:\Users\liyan
目录修改成功 C:\tmp
设置路径的标记为数字标记,多个标记可以使用OR来组合只支持UNIX
# os.chflags(path, flags)
# import os,stat
# path = "/tmp/foo.txt"
# # 为文件设置标记,使得它不能被重命名和删除
# flags = stat.SF_NOUNLINK
# retval = os.chflags( path, flags)
# print "返回值: %s" % retval
更改目录或文件权限
import os, sys, stat
# 假定 /tmp/foo.txt 文件存在,设置文件可以通过用户组执行
os.chmod("D://my content//liyan//Desktop//New folder//foo.txt", stat.S_IXGRP)
# 设置文件可以被其他用户写入
os.chmod("D://my content//liyan//Desktop//New folder//foo.txt", stat.S_IRWXO)
print ("修改成功!!")
# 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下取消只读
修改成功!!
更改文件的所有者,不修改设置为-1,需要root权限 只限制Unix
#os.chown(path, uid, gid);
#os.chown("/tmp/foo.txt", 100, -1)
更改当前进程的跟目录为指定目录,需管理员权限
# import os, sys
# # 设置根目录为 /tmp
# os.chroot("/tmp")
# print "修改根目录成功!!"
打开关闭文件
import os, sys
# 打开文件
fd = os.open( "D://my content//liyan//Desktop//New folder//foo1.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test")
# 关闭文件
os.close( fd )
print ("关闭文件成功!!")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-28-d1a387feca4b> in <module>
5
6 # 写入字符串
----> 7 os.write(fd, "This is test")
8
9 # 关闭文件
TypeError: a bytes-like object is required, not 'str'
import os, sys
# 打开文件
fd = os.open( "D://my content//liyan//Desktop//New folder//foo1.txt", os.O_RDWR|os.O_CREAT )
# 写入字符串
os.write(fd, "This is test")
# 关闭文件
os.closerange( fd, fd)
print ("关闭文件成功!!")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-9ad695da6c45> in <module>
5
6 # 写入字符串
----> 7 os.write(fd, "This is test")
8
9 # 关闭文件
TypeError: a bytes-like object is required, not 'str'
# 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")
# # 关闭文件
# os.closerange( fd, d_fd)
# print "关闭所有文件成功!!"
# import os, sys
# # 打开文件
# fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
# # 写入字符串
# os.write(fd, "This is test")
# # 文件描述符为 1000
# fd2 = 1000
# os.dup2(fd, fd2);
# # 在新的文件描述符上插入数据
# os.lseek(fd2, 0, 0)
# str = os.read(fd2, 100)
# print "读取的字符串是 : ", str
# # 关闭文件
# os.close( fd )
# print "关闭文件成功!!"
返回指定列表
import os, sys
# 打开文件
path = "D://my content//liyan//Desktop//New folder//"
dirs = os.listdir( path )
# 输出所有文件和文件夹
for file in dirs:
print(file)
112
113
foo.txt
foo1.txt
os.getcwd()
返回当前工作目录
import os, sys
# 创建的目录
path = "D://my content//liyan//Desktop//New folder//daily"
os.makedirs( path, 0o755 );
print ("路径被创建")
路径被创建
删除
# import os, sys
# # 列出目录
# print ("目录为: %s" %os.listdir(os.getcwd()))
# # 移除
# os.remove("D://my content//liyan//Desktop//New folder//foo.txt")
# # 移除后列出目录
# print ("移除后 : %s" %os.listdir(os.getcwd()))
# os.removedirs(path)
# os.renames(old, new)
# os.rmdir(path)
python批量提取子文件夹下指定名称的文件
import os
import re
import xlwt
# 递归复制文件夹内的文件
# def copyFiles(sourceDir, targetDir):
# for file in os.listdir(sourceDir):
# sourceDir1 = os.path.join(sourceDir, file) # 路径名拼接
# targetDir1 = os.path.join(targetDir)
# for file in os.listdir(sourceDir1):
# sourceDir2 = os.path.join(sourceDir1, file)
# # 忽略某些特定的子文件夹
# if sourceDir2.find("113") > 0:
# # 列出源目录文件和文件夹
# for file in os.listdir(sourceDir2):
# # 拼接完整路径
# if re.search('Gazeraw.csv', file):
# sourceFile = os.path.join(sourceDir2, file)
# targetFile = os.path.join(targetDir1, file)
# if os.path.isfile(sourceFile):
# if not os.path.exists(targetDir1):
# os.makedirs(targetDir1)
# if not os.path.exists(targetFile) or (os.path.exists(targetFile) and (
# os.path.getsize(targetFile) != os.path.getsize(sourceFile))):
# open(targetFile, "wb").write(open(sourceFile, "rb").read())
# copyFiles("D:\\my content\\liyan\\Desktop\\New folder","D:\\my content\\liyan\\Desktop\\New folder\\112")
shutil
- shutil.copyfileobj(fsrc, fdst[, length=16*1024]) copy文件内容到另一个文件,可以copy指定大小的内容。这个方法是shutil模块中其它拷贝方法的基础,其它方法在本质上都是调用这个方法。
import shutil
s=open('D:\\my content\\liyan\\Desktop\\New folder\\foo1.txt','r')
d=open('D:\\my content\\liyan\\Desktop\\New folder\\foo12.txt','w')
shutil.copyfileobj(s,d,length=16*1024)
- shutil.copyfile(src, dst) 拷贝整个文件。同样看下它的源码,忽略前面一些检测用的代码,该方法的核心在最后几行,我们可以很清楚地看到copyfile()方法对copyfileobj()进行了调用。
- shutil.copymode(src, dst) 仅拷贝权限。内容、组、用户均不变。
- shutil.copystat(src, dst) 仅复制所有的状态信息,包括权限,组,用户,时间等。
- shutil.copy(src,dst) 同时复制文件的内容以及权限,也就是先copyfile()然后copymode()。
- shutil.copy2(src, dst) 同时复制文件的内容以及文件的所有状态信息。先copyfile()后copystat()。
- shutil.ignore_patterns(*patterns) 忽略指定的文件。通常配合下面的copytree()方法使用。
- shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False) 递归地复制目录及其子目录的文件和状态信息 symlinks:指定是否复制软链接。小心陷入死循环。 ignore:指定不参与复制的文件,其值应该是一个ignore_patterns()方法。 copy_function:指定复制的模式
- shutil.rmtree(path[, ignore_errors[, onerror]]) 递归地删除目录及子目录内的文件。注意!该方法不会询问yes或no,被删除的文件也不会出现在回收站里,请务必小心!
- shutil.move(src, dst) 递归地移动文件,类似mv命令,其实就是重命名。
- shutil.which(cmd) 类似linux的which命令,返回执行该命令的程序路径。Python3.3新增
- shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
创建归档或压缩文件。
base_name:压缩后的文件名。如果不指定绝对路径,则压缩文件保存在当前目录下。这个参数必须指定。 format:压缩格式,可以是“zip”, “tar”, “bztar” ,“gztar”,“xztar”中的一种。这个参数也必须指定。 root_dir:设置压缩包里的根目录,一般使用默认值,不特别指定。 base_dir:要进行压缩的源文件或目录。 owner:用户,默认当前用户。 group:组,默认当前组。 logger:用于记录日志,通常是logging.Logger对象。
- shutil.unpack_archive(filename[, extract_dir[, format]])
解压缩或解包源文件。
filename是压缩文档的完整路径 extract_dir是解压缩路径,默认为当前目录。 format是压缩格式。默认使用文件后缀名代码的压缩格式。
import os,shutil
from shutil import copytree, ignore_patterns
path1=r'D:\\my content\\liyan\\Desktop\\New folder'
path2=r'D:\\my content\\liyan\\Desktop\\New folder\\114'
shutil.copytree(path1,path2,ignore=ignore_patterns('*Gazeraw.csv'))
'D:\\\\my content\\\\liyan\\\\Desktop\\\\New folder\\\\114'
import os
import re
import xlwt
#递归复制文件夹内的文件
def copyFiles(sourceDir, targetDir):
for file in os.scandir(sourceDir):
sourceDir1 = os.path.join(sourceDir, file) # 路径名拼接
targetDir1 = os.path.join(targetDir)
# for file in os.listdir(sourceDir1):
# sourceDir2 = os.path.join(sourceDir1, file)
# 忽略某些特定的子文件夹
if file.is_dir():
if sourceDir1.find("114") > 0:
# 列出源目录文件和文件夹
for file in os.scandir(sourceDir1):
if file.is_dir():
sourceDir2 = os.path.join(sourceDir1, file)
if sourceDir2.find("11") > 0:
for file in os.listdir(sourceDir2):
# 拼接完整路径
if re.search('GazeFix.csv', file):
sourceFile = os.path.join(sourceDir2, file)
targetFile = os.path.join(targetDir1, file)
if os.path.isfile(sourceFile):
if not os.path.exists(targetDir1):
os.makedirs(targetDir1)
if not os.path.exists(targetFile) or (os.path.exists(targetFile) and (
os.path.getsize(targetFile) != os.path.getsize(sourceFile))):
open(targetFile, "wb").write(open(sourceFile, "rb").read())
copyFiles("D:\\my content\\liyan\\Desktop\\New folder\\114","D:\\my content\\liyan\\Desktop\\New folder\\diary")
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\111\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\112\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111
D:\my content\liyan\Desktop\New folder\114\113\111