[PY3]——IO——文件目录操作

Posted Jelly_lyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[PY3]——IO——文件目录操作相关的知识,希望对你有一定的参考价值。

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:]) 0755 os.chmod("/test2",0o644) print(oct(os.stat("/test2/").st_mode)[-4:]) 0644
# 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)
2053

# 获取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——文件目录操作的主要内容,如果未能解决你的问题,请参考以下文章

[PY3]——IO——pathlib

C# 获得目录创建时间的源码片段

在Tomcat的安装目录下conf目录下的server.xml文件中增加一个xml代码片段,该代码片段中每个属性的含义与用途

代码校验

py3 pyvenv(py3自带的虚拟环境工具)odoo12c py3.7 venv环境搭建记录

文件目录的操作DirectoryInfo类