os 模块和 shutil 模块主要用于在 python 中执行一些 Linux 相关的操作, 其中 os.system(command) 可以直接运行 Linux 命令, 如 os.system('ls').
不过, 通常这条命令不需要用到. 因为 shell 常用的那些命令在 python 中通常有对应而且同样简洁的写法. 上述命令可用 os.listdir("/") 代替
- import os
- import shutil
- # ls --> listdir
- os.listdir("/")
- # cp --> copy | copy2 | copytree
- shutil.copy(src,dest) # 参数 src 是指源文件的名字, 参数 dest 则是目标文件或者目标目录的名字. 如果 dest 是一个目录名, 就会在那个目录下创建一个相同名字的文件
- shutil.copy2(src,dest) # 同上, 不过 copy2 还会复制最后存取时间和最后更新时间
- shutil.copytree(src,dst[,symlinks]) # src,dst 同上, symlinks 是一个布尔值, 如果是 True 的话就创建符号链接, 用于复制目录
- # mv --> move
- shutil.move(src,dst) # 移动文件
- # cd --> chdir
- os.chdir(dirname) # dirname 为指定目录
- # pwd --> getcwd
- os.getcwd() # 得到当前环境变量
- # chroot --> chroot
- os.chroot(dirname) # 将 dirname 作为进程的根目录
- # remove --> remove,remove -r --> rmdir
- os.remove(path) # 删除文件, 不能用于删除目录
- os.rmdir(path) # 删除文件夹
- # 更改权限
- os.chmod(path,mode)
- '''
- 更改 path 的权限位. mode 可以是以下值 (使用 or 连接) 的组合:
- R 代表读, W 代表写, X 代表执行权限. USR 代表用户, GRP 代表组, OTH 代表其它
- os.S_ISUID
- os.S_ISGID
- os.S_ENFMT
- os.S_ISVTX
- os.S_IREAD
- os.S_IWRITE
- os.S_IEXEC
- os.S_IRWXU
- os.S_IRUSR
- os.S_IWUSR
- os.S_IXUSR
- os.S_IRWXG
- os.S_IRGRP
- os.S_IWGRP
- os.S_IXGRP
- os.S_IRWXO
- os.S_IROTH
- os.S_IWOTH
- os.S_IXOTH
- '''
- # mkdir
- os.mkdir(path,[mode]) # 创建目录. mode 的意义参见 os.chmod(), 默认是 0777
- os.makedirs(path,[mode]) # 同上, 不过会先创建不存在的父目录.
常用命令
- import os
- # 常用
- os.path.join(dirname,basename) # 将目录名和文件名组合成一个完整的路径名, 比如: os.path.join("/foo","bar.dat")会返回 "/foo/bar.dat".
- os.path.split(path) # 得到 (目录, 文件名), 比如: os.path.split("/foo /bar.dat") 会返回("/foo","bar.dat")
- os.path.splitext(path) # 把 path 分离成基本名和扩展名. 比如: os.path.splitext("/foo /bar.tar.bz2″)返回('/foo/bar.tar','.bz2′)
- os.path.exists(path) # 判断文件或者目录是否存在
- os.path.isfile() # 判断 path 所指向的是否是一个普通文件, 而不是目录
- os.path.isdir(path) # 判断 path 所指向的是否是一个目录, 而不是普通文件
- # 其他
- os.path.islink(path) # 判断 path 所指向的是否是一个符号链接
- os.path.ismount(path) # 判断 path 所指向的是否是一个挂接点(mount point)
- os.path.getatime(path) # 返回 path 所指向的文件或者目录的最后存取时间.
- os.path.getmtime(path) # 返回 path 所指向的文件或者目录的最后修改时间
- os.path.getctime(path) # 返回 path 所指向的文件的创建时间
- os.path.getsize(path) # 返回 path 所指向的文件的大小
- os.path.abspath(path) # 把 path 转成绝对路径
- os.path.expanduser(path) # 把 path 中包含的 "~" 和 "~user" 转换成用户目录
- os.path.expandvars(path) # 根据环境变量的值替换 path 中包含的 "$name" 和 "${
- name
- }", 比如环境变量 FISH=nothing, 那 os.path.expandvars("$FISH/abc")会返回 "nothing/abc"
- os.path.normpath(path) # 去掉 path 中包含的 "." 和 ".."
- os.path
- import os
- os.chown(path,uid,gid) # 改变文件的属主. uid 和 gid 为 - 1 的时候不改变原来的属主.
- os.link(src,dst) # 创建硬连接
- os.readlink(path) # 得到 path 这个符号链接所指向的路径
- os.symlink(src,dst) # 创建符号链接
其他
练习
sys.argv 是一个列表, 保存了 python 程序的命令行参数. 其中 sys.argv[0]是程序本身的名字.
- import sys,os.path,shutil
- for f in os.listdir(sys.argv[1]):
- shutil.copy(os.path.join(sys.argv[1],f),sys.argv[2])
复制指定文件夹下的所有文件夹及文件
- import os.path,sys
- dirname=sys.argv[1]
- i=10001
- for f in os.listdir(dirname):
- src=os.path.join(dirname,f)
- if os.path.isdir(src):
- continue
- os.rename(src,str(i))
- i +=1
把一个文件夹下的所有文件重命名成 10001~10999
参考: https://www.cnblogs.com/momoyan/p/9145742.html
来源: http://www.bubuko.com/infodetail-2963092.html