鱼C论坛

 找回密码
 立即注册
查看: 196015|回复: 306

[扩展阅读] os、os.path 模块中关于文件、目录常用的函数使用方法

    [复制链接]
发表于 2014-4-3 21:33:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我们第一节课就讲过了,Python是跨平台的语言,也即是说同样的源代码在不同的操作系统不需要修改就可以同样实现。

因此Python的作者就倒腾了OS模块这么一个玩意儿出来,有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用。


os模块中关于文件/目录常用的函数使用方法


函数名
使用方法
getcwd()
返回当前工作目录
chdir(path)
改变工作目录
listdir(path='.')
列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录)
mkdir(path)
创建单层目录,如该目录已存在抛出异常
makedirs(path)
递归创建多层目录,如该目录已存在抛出异常,注意:'E:\\a\\b'和'E:\\a\\c'并不会冲突
remove(path)
删除文件
rmdir(path)
删除单层目录,如该目录非空则抛出异常
removedirs(path)
递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
rename(old, new)
将文件old重命名为new
system(command)
运行系统的shell命令
walk(top)
遍历top路径以下所有的子目录,返回一个三元组:(路径, [包含目录], [包含文件])【具体实现方案请看:第30讲课后作业^_^】
以下是支持路径操作中常用到的一些定义,支持所有平台
os.curdir
指代当前目录('.')
os.pardir
指代上一级目录('..')
os.sep
输出操作系统特定的路径分隔符(Win下为'\\',Linux下为'/')
os.linesep
当前平台使用的行终止符(Win下为'\r\n',Linux下为'\n')
os.name
指代当前使用的操作系统(包括:'posix',  'nt', 'mac', 'os2', 'ce', 'java')



os.path模块中关于路径常用的函数使用方法


函数名
使用方法
basename(path)
去掉目录路径,单独返回文件名
dirname(path)
去掉文件名,单独返回目录路径
join(path1[, path2[, ...]])
将path1, path2各部分组合成一个路径名
split(path)
分割文件名与路径,返回(f_path, f_name)元组。如果完全使用目录,它也会将最后一个目录作为文件名分离,且不会判断文件或者目录是否存在
splitext(path)
分离文件名与扩展名,返回(f_name, f_extension)元组
getsize(file)
返回指定文件的尺寸,单位是字节
getatime(file)
返回指定文件最近的访问时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getctime(file)
返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
getmtime(file)
返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或localtime()函数换算)
以下为函数返回 True 或 False
exists(path)
判断指定路径(目录或文件)是否存在
isabs(path)
判断指定路径是否为绝对路径
isdir(path)
判断指定路径是否存在且是一个目录
isfile(path)
判断指定路径是否存在且是一个文件
islink(path)
判断指定路径是否存在且是一个符号链接
ismount(path)
判断指定路径是否存在且是一个挂载点
samefile(path1, paht2)
判断path1和path2两个路径是否指向同一个文件


评分

参与人数 31荣誉 +118 鱼币 +111 贡献 +62 收起 理由
Tkhmily + 5 + 5 + 3 感谢楼主无私奉献!
狂奔的梦想 + 1
hhiop + 5
wenwu781923 + 5 + 5 + 3
songwentao + 5 无条件支持楼主!
爱重庆爱生活 + 3 + 3 + 3 鱼C有你更精彩^_^
少年叫李狗蛋 + 5 感谢楼主无私奉献!
ouosdd + 3 怎么没有join函数呢
焦健鬼 + 5 + 5 + 3 厉害
DakeWang + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-3 22:43:44 | 显示全部楼层
真强大,:lol:
rename(1.MP3, 1.txt)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 3 反对 5

使用道具 举报

发表于 2014-4-6 19:48:14 | 显示全部楼层
为什么用os.path模块中函数时,不需要事先导入模块吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2014-4-6 20:43:56 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-4-6 22:07:42 | 显示全部楼层
小甲鱼 发表于 2014-4-6 20:43
import os的时候已经导入了

谢谢,小甲鱼老湿的热心回答。不过,我还是有点疑惑,想问一下,os.path模块是不是os模块中的一部分,所以,在导入os模块时,已经把os.path模块一并导入python了,因此,在使用os.path模块中的函数时,就不需要重新导入了(当然如果我再次导入os.path是不是也没有错误啊)。这样理解对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2014-4-7 15:06:01 | 显示全部楼层
kuangkuang 发表于 2014-4-6 22:07
谢谢,小甲鱼老湿的热心回答。不过,我还是有点疑惑,想问一下,os.path模块是不是os模块中的一部分,所以 ...

嗯啊,os里包含了os.path模块。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-7-8 21:27:21 | 显示全部楼层
真心强大啊,不过太多了,记不住。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-7-22 15:06:41 | 显示全部楼层
这么专业啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-7-22 16:42:35 | 显示全部楼层
这个太帅了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-10 12:42:58 | 显示全部楼层
great,thanks!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-8-12 13:29:57 | 显示全部楼层
学习中……多谢整理和分享!{:1_1:}{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-31 11:55:44 | 显示全部楼层
这才发现这个。看答案有os模块还百度了一番- -。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-12 10:16:13 | 显示全部楼层
OS,sys好用的两大系统模块。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-13 14:53:52 | 显示全部楼层
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# encoding: utf-8
__author__ = 'sweet'
import os
import os.path

def Renamefiles(srcdir,prefix):
    srcfiles=os.listdir(srcdir)
    index =1
    for srcfile in srcfiles:
        srcfilename=os.path.splitext(srcfile)[0][1:]
        sufix=os.path.splitext(srcfile)[1]
        destfile=srcdir+'//'+prefix+'_%04d'%(index)+sufix
        srcfile=os.path.join(srcfile,destfile)
        os.rename(srcfile,destfile)
        index+=1



if __name__ == '__main__':
    srcdir="F://python"
    prefix="test"
    Renamefiles(srcdir,prefix)
   

上述代码在pycharm中运行出错,出错提示:os.rename(srcfile,destfile)={WindowsError}[Error 2]
求小鱼儿或者鱼油帮忙解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2014-11-21 10:19:21 | 显示全部楼层
相见恨晚呐!不过我没有鱼币啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-26 12:53:48 | 显示全部楼层
好强大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-5 18:14:45 | 显示全部楼层
>>> import os
>>> os
<module 'os' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/os.py'>
>>> os.path
<module 'posixpath' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/posixpath.py'>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-12-5 18:17:26 | 显示全部楼层
本帖最后由 戴宇轩 于 2014-12-5 18:22 编辑
小甲鱼 发表于 2014-4-7 15:06
嗯啊,os里包含了os.path模块。

为什么我的分两个模块?os.path就是posixpath?
(我用的是类Unix的一员---iOS)
>>> import os
>>> os.path
<module 'posixpath' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/posixpath.py'>
>>> import posixpath
>>> posixpath
<module 'posixpath' from '/private/var/mobile/Containers/Bundle/Application/B52C7376-D34D-460E-AB7D-BBD110828D55/Pythonista.app/pylib/posixpath.py'>

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-1-15 20:43:50 | 显示全部楼层
:lol:大爱小甲鱼!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2015-1-29 11:24:44 | 显示全部楼层
收藏
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 13:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表