IO—os、shutil—文件目录操作

目录操作

1. 新建

os.mkdir(path[, mode])

相当于mkdir,新建目录

os.makedirs(path[, mode])

相当于mkdir -p

os.path.exists("/test2")
False # os.mkdir( ) 如果父路径不存在,则新建报错
os.mkdir('/test2/abc')
FileNotFoundError: [Errno 2] No such file or directory: '/test2/abc' # os.makedirs( ) 会自动创建父目录,相当于mkdir -p
os.makedirs('/test2/abc')
print(os.path.exists('/test2/abc'))
True

2. 删除

os.rmdir(path)

删除空目录

shutil.rmtree(path)

删除且可以递归删除
os.rmdir("/test2/abc")
OSError: [Errno 39] Directory not empty: '/test2/abc'

3. 查看目录内容

os.listdir(path)

列出目录下的内容,相当于ls

# 列出目录内容但不递归子目录,返回列表
print(os.listdir("/test2/abc"))
['abc2', 'kong.txt']

4. 工作目录的查看和切换

os.getcwd()

获取当前所在目录  相当于pwd

os.chdir(path)

进入指定路径目录  相当于cd

print(os.getcwd())
/py3 os.chdir('/test')
print(os.getcwd())
/test

5. 重命名

os.rename(src, dst)

移动/重命名,相当于mv

print(os.listdir("/test2/aa"))
['aa.sh']
print(os.listdir("/test2/bb"))
[] os.rename("/test2/aa/aa.sh","/test2/bb/aa.sh.bak") print(os.listdir("/test2/aa"))
[]
print(os.listdir("/test2/bb"))
['aa.sh.bak']

6. 权限

os.chmod(path, mode)

修改权限

os.chown(path, uid, gid)

修改属主属组

shutil (path,user=None,group=None)

修改属主属组

os.lchmod(path, mode)

os.lchown(path, uid, gid)

# os.chmod
print(oct(os.stat("/test2/").st_mode)[-4:]) os.chmod("/test2",0o644) print(oct(os.stat("/test2/").st_mode)[-4:]) # os.chown
print(pwd.getpwuid(os.stat("/test2").st_uid).pw_name)
root os.chown("/test2",uname_uid("user00"),gname_gid("user00")) print(pwd.getpwuid(os.stat("/test2").st_uid).pw_name)
user00
print(grp.getgrgid(os.stat("/test2").st_gid).gr_name)
user00 # shutil.chown(这种方法的uid、gid参数可以接受字符串,更方便!)
print(pwd.getpwuid(os.stat("/test2/aa.txt").st_uid).pw_name)
root
shutil.chown("/test2/aa.txt","user00","user00")

print(pwd.getpwuid(os.stat("/test2/aa.txt").st_uid).pw_name)
user00

7. 复制和移动

shutil.copytree 复制整个目录树
shutil.move 相当于windows下的Ctrl+X、Ctrl+V
# shutil.move(src,dst,copy_function = copy2 )
print(os.path.exists("/test2/aa"))
True print(os.listdir("/test2/aa"))
['aa_aa', 'test.txt'] shutil.move("/test2/aa","/test2/bb") print(os.path.exists("/test2/aa"))
False print(os.path.exists("/test2/bb"))
True print(os.listdir("/test2/bb"))
['aa_aa', 'test.txt'] # shutil.copytree(src,dst,symlinks = False,ignore = None,copy_function = copy2,ignore_dangling_symlinks = False )
print(os.path.exists("/test2/bb"))
True print(os.listdir("/test2/bb"))
['aa_aa', 'test.txt'] shutil.copytree("/test2/bb","/test/bb",ignore=ignore_patterns("*.txt")) print(os.path.exists("/test/bb"))
True print(os.listdir("/test/bb"))
['aa_aa']

8. 获取目录信息

os.stat(path)

获取目录信息 相当于stat

os.statvfs(path)

获取指定路径的文件系统统计信息

os.path.getatime(path)

 

os.path.getmtim(path)

 

os.path.getctime(path)

 

os.path.getsize(path)

 
# os.stat输出的信息和stat命令一致
print(os.stat("/test2"))
os.stat_result(st_mode=16804, st_ino=296353, st_dev=2053, st_nlink=4, st_uid=500, st_gid=500, st_size=4096, st_atime=1503497751, st_mtime=1503497749, st_ctime=1503497749) os.system("stat /test2")
File: `/test2'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 805h/2053d Inode: 296353 Links: 4
Access: (0644/drw-r--r--) Uid: ( 500/ user00) Gid: ( 500/ user00)
Access: 2017-08-23 10:15:51.125760987 -0400
Modify: 2017-08-23 10:15:49.496761986 -0400
Change: 2017-08-23 10:15:49.496761986 -0400 # os.stat中输出的每一条信息都可以通过 . 的方式单独获取
print(os.stat("/test2").st_dev) # 获取ctime、atime、mtime时间(os.stat的输出是时间戳的形式所以用datetime)
print(datetime.fromtimestamp(os.stat("/test2/").st_ctime))
2017-08-22 14:51:07.943986 # 获取uid、gid(os.stat的输出是gid和uid可以利用pwd和grp转换为更易读的username和groupname)
print(pwd.getpwuid(os.stat("/test2").st_uid).pw_name)
user00
print(grp.getgrgid(os.stat("/test2").st_gid).gr_name)
user00 print(os.statvfs("/test2"))
os.statvfs_result(f_bsize=4096, f_frsize=4096, f_blocks=2396548, f_bfree=1024591, f_bavail=902851, f_files=609600, f_ffree=384157, f_favail=384157, f_flag=4096, f_namemax=255) f_bsize: 文件系统块大小
f_frsize: 分栈大小
f_blocks: 文件系统数据块总数
f_bfree: 可用块数
f_bavail:非超级用户可获取的块数
f_files: 文件结点总数
f_ffree: 可用文件结点数
f_favail: 非超级用户的可用文件结点数
f_fsid: 文件系统标识 ID
f_flag: 挂载标记
f_namemax: 最大文件长度

9. 修改

os.utime(path, times)

修改文件的访问和修改的时间

文件操作

1. 新建

f=open("/test2/newfile.txt",mode="w+")

2. 读写

(参考《[PY3]——IO——文件读写》

3. 删除

os.remove(path) 删除文件
print(os.path.exists("/test2/newfile.txt"))
True os.remove("/test2/newfile.txt") print(os.path.exists("/test2/newfile.txt"))
False

4. 重命名

同目录操作

5. 权限

同目录操作

6. 移动

shutil.copyfile 复制内容,属主属组不复制
shutil.copymode  复制权限
shutil.copystat 复制元数据
shutil.copy 复制内容和权限,相当于copyfile+copymode
shutil.copy2 复制内容和元数据,相当于copyfile+copystat

7. 获取文件信息

同目录操作

其他操作

1. 判断

os.path.exists(path) 判断该路径是否存在
os.path.isfile(path) 判断是否是文件
os.path.isdir(path) 判断是否是目录
os.path.ismount(path) 判断是否是挂载点
os.path.islink(path) 判断是否是软链接
os.path.isabs(path) 判断是否是绝对路径

2. 路径获取

os.path.basename(path)  
os.path.dirname(path)  
os.path.relpath(path)  
os.path.split(path) 将path分割成目录和文件名的二元组返回

3. 软/硬链接

os.link(src,dst)                                      
os.symlink(src,dst)  
os.readlink(path)  

参考资料

《shutil模块介绍》

《os.path官方文档》

《shutil官方文档》

《python3-os方法总结》

[PY3]——IO——文件目录操作的更多相关文章

  1. python2.7.13标准库文件目录操作与文件操作

    标准库的中文参考文档: http://python.usyiyi.cn/translate/python_278/library/index.html 官方标准库文档:https://docs.pyt ...

  2. python IO流操作

    python IO流操作 学习完本篇,你将会独立完成 实现操作系统中文件及文件目录的拷贝功能. 将目标图片拷贝到指定的目录中 实现一个自动阅卷程序, Right.txt保存正确答案,xx(学生姓名). ...

  3. paip.文件目录操作uAPI php python java对照

    paip.文件目录操作uAPI php python java对照 chdir -- 改变目录 chroot -- 改变根目录 dir -- directory 类 closedir -- 关闭目录句 ...

  4. php文件夹与文件目录操作函数

    在php中一些常用的文件夹/文件目录操作函数总结. php文件夹操作函数 string basename ( string path [, string suffix] ) 给出一个包含有指向一个文件 ...

  5. 你一定要知道的关于Linux文件目录操作的12个常用命令

    写在前面: 1,<你一定要知道的关于Linux文件目录操作的12个常用命令>是楼主收集的关于Linux文件目录操作最常用的命令,包括文件或目录的新建.拷贝.移动.删除.查看等,是开发人员操 ...

  6. Java IO流操作汇总: inputStream 和 outputStream【转】

    我们在进行Android java 开发的时候,经常会遇到各种IO流操作.IO流操作一般分为两类:字符流和字节流.以“Reader”结尾都是字符流,操作的都是字符型的数据:以“Stream”结尾的都是 ...

  7. Hadoop基础-通过IO流操作HDFS

    Hadoop基础-通过IO流操作HDFS 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.上传文件 /* @author :yinzhengjie Blog:http://www ...

  8. IO流----操作文件的9种方法代码实现

    IO流----操作文件的9种方法代码实现: 1:使用字节流读写数据: 四种方式: method1:          每次读写一个字节,边读边写: /* * 复制文本文件. * * 数据源:从哪里来 ...

  9. python OS 模块 文件目录操作

    Python OS 模块 文件目录操作 os模块中包含了一系列文件操作的函数,这里介绍的是一些在Linux平台上应用的文件操作函数.由于Linux是C写的,低层的libc库和系统调用的接口都是C AP ...

随机推荐

  1. Solr相似度名词:VSM(Vector Space Model)向量空间模型

    最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查找相似度最高的.最优的结果.索性就直接跳到这个问题看,很多资料都提到了VSM(Vector Space Model)即向 ...

  2. subprocess.Popen命令如何隐藏弹框

    在用PYQT编写GUI界面时,代码中有用到subprocess.Popen(),打包exe后每次遇到subprocess语句是就会弹出命令框,很是头疼, 下面是解决的办法 import subproc ...

  3. raiserror 的用法

    if exists(select top 1 UserName from [dbo].[LJS_Test_User] where UserName=@UserName) begin raiserror ...

  4. 论 BUG调试与(程序猿)初学者

    作为一枚程序猿,BUG调试是最基本的技能,对于初学者更是重中之重.个人而言,要想为自己的程序猿生涯更上一层楼,就得知道什么是BUG调试,而且还必须知道怎么调好BUG.那么BUG究竟是什么呢?在我之前的 ...

  5. 基于GeoServer切片地图服务的发布

    接着上一篇文章,如何将JPG格式的图片转化为带地理坐标的TIFF格式里提及的最近的一个项目,数据源是一张高分辨率的2.5维图片,现在已经成功转化成了带有地理坐标的TIFF格式.下面将介绍借助GeoSe ...

  6. 【OCP|052】OCP最新题库解析系列-2

    2.Which two are true about Optimizer Statistics? ❑ A) They do not persist across Instance restarts. ...

  7. 基于.NET的开源搜索引擎-DotLucene(2)

    NLucene是将 Lucene 从 Java 移植到 .NET 的一个 SourceForge 项目,它从 Lucene 1.2 版本转化而来. Lucene.Net因为 NLucene 项目到20 ...

  8. delphi 10.2---非常简单的数组用法求和

    unit Unit9; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System ...

  9. FlowPortal-BPM——管理员、功能的权限设置

    一.管理员设置 管理工具→安全组→安全组名称→管理授权→[添加管理人员]→[设置管理人员权限] 二.访问功能权限设置 (1)模块访问权限 (2)访问控制→[在需要的文件夹下]新建子资源→[资源名称]. ...

  10. 【笔记】AJAX基础

    [笔记]AJAX基础 Django AJAX  知识储备:JSON 什么是 JSON JSON 是轻量级的文本数据交换格式 JSON 独立于语言和平台.JSON 解析器和 JSON 库支持许多不同的编 ...